「这是我参与11月更文应战的第1天,活动概况检查:2021最终一次更文应战」。

OpenCV

OpenCV的全称是Open Source Computer Vision Library,是一个跨平台的计算机视觉库。 OpenCV也广泛运用于图片辨认、图片处理等场景,被称为“计算机视觉”,本次教程,就教咱们多种办法布置OpenCV嗷。

运用场景

OpenCV的运用场景很多,包含但不限于:

  • 增强现实
  • 人脸辨认
  • 手势辨认
  • 人机交互
  • 动作辨认
  • 运动跟踪
  • 物体辨认
  • 图画分割

详细运用

OpenCV其实便是一个C++的库,可是Python和Java也是有接口能够进行调用。本次教程,就交咱们编译装置openCV的C++库,咱们也能够根据自己需求,挑选是否编译Python和Java的接口。

Python内,其实能够用pip直接装置的嗷。本文就不介绍了,首要解说手动编译装备

本次演示

本次演示,是在macOS和Linux上编译并装置OpenCV,Windows不在本教程范围内

Linux上,运用Debian服务器,不管是CentOS仍是Debian都能够装置,可是最好提前更新一次软件源:

# Debian/Ubuntu
apt update 
apt upgrade
# CentOS
yum update
yum upgrade

环境依靠

编译OpenCV需求增加一些依靠,否则无法编译或Cmkae自动装备。这儿我初略分为必要依靠和模块依靠:

  • 必要依靠:编译OpenCV时必定需求的依靠。
  • 模块依靠:编译OpenCV时分,挑选的依靠;如:需求对Java供给支撑,需求装置ant。

一些可选支撑,比方:libpng包、libjepg包等等,这儿也不做详细阐明嗷。

必要依靠

这儿的必要依靠为GCC和Cmake,否则无法进行编译。在Linux上装置GCC和Cmake,根据发行版别的不同:

# Debian/Ubuntu版别
sudo apt-get install build-essential
sudo apt-get install cmake
# CentOS发行版别
sudo yum install gcc gcc-c++
sudo yum install cmake

如:运用服务器的CentOS镜像:

macOS和Linux上手动编译OpenCV并作为依赖添加到Python/C++/Java

对于macOS,也很简略,给两种办法:

  • 引荐在装置Homebrew的情况下,装置cmake即可。
  • 装置Xcode或XcodeXcode Command Line Tools(这样就有GCC),之后装置cmake GUI,并装备cmake GUI的cmake进环境变量

macOS和Linux上手动编译OpenCV并作为依赖添加到Python/C++/Java

模块依靠

(本来想一个小目录里写完的。写了之后,仍是觉得这儿简略说一下,下文详解……)

模块依靠,便是你需求把OpenCV作为依靠,增加到详细什么言语的开发环境。举例:

  • Python2&Python3:需求指定Python的装置路径,并在体系变量内,指明lib地址。
  • Java:需求指明JAVA_HOME,需求ANT的支撑。

对其功用,一些特定依靠不赘述。(比方:ffmpeg)

OpenCV源码

咱们进入OpenCV的官网:opencv.org,找到Source Forge选项:

macOS和Linux上手动编译OpenCV并作为依赖添加到Python/C++/Java

并下载源码。你也能够直接到GitHub上下载源码或前史版别、标签。

需求注意⚠️:下载GitHub上OpenCV很慢,你能够试试Gitee镜像,下面就演示,在服务器上下载4.5.3版别OpenCV源码:

git clone -b 4.5.3 https://gitee.com/mirrors/opencv

macOS和Linux上手动编译OpenCV并作为依赖添加到Python/C++/Java

Cmake预编译

下载好了OpenCV的源码,接下来咱们运用Cmake进行预编译,进入OpenCV源码目录,输入:

cmake -S . -B build -DCMAKE_INSTALL_PREFIX=/usr/local/opencv

其间:

  • DCMAKE_INSTALL_PREFIX:OpenCV的装置地址,这儿挑选装置到/sur/local/opencv里。

之后,就会开端“跑码”预编译生成build文件夹和Markfile文件:

macOS和Linux上手动编译OpenCV并作为依赖添加到Python/C++/Java

可是这样,咱们后续编译只能装置Python2(体系)和C++的支撑,无法支援到Python3和java。

接下来,就教咱们怎样增加Python3和java依靠。

macOS和Linux上手动编译OpenCV并作为依赖添加到Python/C++/Java

增加依靠

要增加对Java或许Python的依靠,就需求从头预编译。所以,你需求删去刚刚预编译出来的build文件夹:

rm -rf build

Java

Java的装备很简略,首先是装置并装备JDK,尤其是是装备JAVA_HOME,如:

# Java11
JAVA_HOME="$HOME/myEnvironment/ZuluJDK11"
CLASSPATH=$JAVA_HOME/lib/
PATH=$PATH:$JAVA_HOME/bin/
export PATH JAVA_HOME CLASSSPATH

macOS和Linux上手动编译OpenCV并作为依赖添加到Python/C++/Java

假如你不知道怎样在Linux和macOS上装备JDK,能够参考我之前的视频教程:

  • 腾讯云社区:https://cloud.tencent.com/developer/video/24850
  • Bilibili:https://www.bilibili.com/video/BV1Yw411d7bU

需求特别注意⚠️,假如你的macOS或许Linux,装备了jenv,那么jenv的装备需求在JDK装备之前,比方我macOS本地就有装备jenv,需求这样编写环境变量:

macOS和Linux上手动编译OpenCV并作为依赖添加到Python/C++/Java

之后,还需装置ANT,办法也很多,最简略的是用软件包管理器装置:

# macOS 
brew install ant
# Debian/Ubuntu
sudo apt-get install ant
# CentOS
sudo yum install ant

比方:我在服务器的Debian体系上装置ANT:

macOS和Linux上手动编译OpenCV并作为依赖添加到Python/C++/Java

装置好后,咱们仍是需求设置ANT_HOME,否则OpenCV编译时分无法读取,软件包装置的ANT:

  • /usr/share/ant: Linux经过软件包装置ant地址(Debian服务器)
  • /usr/local/Cellar/ant/{ant_version}:macOS经过Homebrew装置

macOS和Linux上手动编译OpenCV并作为依赖添加到Python/C++/Java

注:macOS上,经过Homebrew装置的ant,应该是不用装备ANT_HOME,Homebrew会自动装备。

之后,再到OpenCV源码内,从头预编译即可:

macOS和Linux上手动编译OpenCV并作为依赖添加到Python/C++/Java

能够看到,这样的预编译,就有JDK支撑了。

Python3

Python3的布置,会杂乱一些。我建议不要动体系的Python3,macOS和Linux都装置Anaconda,用Anaconda的Python3比较好。macOS的Anaconda,仍是和上文相同,能够用Homebrew装置:

# macOS
brew install anaconda

当然,也能够和Linux相同,运用Anaconda的脚本:

  • docs.anaconda.com/anaconda/in…

官网可能对大陆服务器不是很友好,能够用清华镜像下载源:

  • mirrors.tuna.tsinghua.edu.cn/anaconda/ar…

macOS和Linux上手动编译OpenCV并作为依赖添加到Python/C++/Java

装置办法很简略:下载脚本后,用默认的Shell运转即可;如:

macOS和Linux上手动编译OpenCV并作为依赖添加到Python/C++/Java

我的装置地址是/root/anaconda3,所以再装备一下环境变量:

macOS和Linux上手动编译OpenCV并作为依赖添加到Python/C++/Java

macOS和Linux上手动编译OpenCV并作为依赖添加到Python/C++/Java

之后,咱们就来配/root/anaconda3/bin/python3这个Python3:

从头运转cmake:

cmake -S . -B build -DCMAKE_INSTALL_PREFIX=/usr/local/opencv -D BUILD_opencv_python3=ON -DPYTHON_DEFAULT_EXECUTABLE=/root/anaconda3/bin/python3

其间:

  • DCMAKE_INSTALL_PREFIX:OpenCV装置地址。
  • BUILD_opencv_python3:激活Python3
  • DPYTHON_DEFAULT_EXECUTABLE:指定Python3地址

macOS和Linux上手动编译OpenCV并作为依赖添加到Python/C++/Java

Make编译

现在,咱们就能够正式开端编译了:

# 进入build目录
cd build
# make编译
make -j{N}

其间,{N}取决于你有几个CPU、几个线程,比方:我的MacBook Pro:

macOS和Linux上手动编译OpenCV并作为依赖添加到Python/C++/Java

可是,我买的服务器,是2C 4G的;所以,这儿运用:

macOS和Linux上手动编译OpenCV并作为依赖添加到Python/C++/Java

等候编译好后,进行装置即可:

make install

macOS和Linux上手动编译OpenCV并作为依赖添加到Python/C++/Java

又是一段“跑码“,OpenCV就装置好了。

macOS和Linux上手动编译OpenCV并作为依赖添加到Python/C++/Java

这样编译好了,咱们怎样在开发环境运用呢?下面看看怎样运用。

导入Python

首先咱们看看怎样导入到Python,在未导入前,是这样的:

macOS和Linux上手动编译OpenCV并作为依赖添加到Python/C++/Java

首要是,咱们的OpenCV对应编译的Python3库文件地址在:/usr/local/opencv/lib/python3.8/site-packages/cv2(也便是OpenCV装置目录下的lib文件夹):

macOS和Linux上手动编译OpenCV并作为依赖添加到Python/C++/Java

而咱们Python3的库文件在/root/anaconda3/lib/python3.8/site-packages

macOS和Linux上手动编译OpenCV并作为依赖添加到Python/C++/Java

所以,咱们需求树立软链接:

# 仿制so文件
cp /usr/local/opencv/lib/python3.8/site-packages/cv2/python-3.8/cv2.cpython-38-x86_64-linux-gnu.so /usr/local/opencv/lib/python3.8/site-packages/cv2/python-3.8/cv2.so
# 软链接so文件
ln -s /usr/local/opencv/lib/python3.8/site-packages/cv2/python-3.8/cv2.so /root/anaconda3/lib/cv2.so
# 软链接cv2包
ln -s /usr/local/opencv/lib/python3.8/site-packages/cv2 /root/anaconda3/lib/python3.8/site-packages/cv2

之后,在Python内就能够运用了:

macOS和Linux上手动编译OpenCV并作为依赖添加到Python/C++/Java

当然,macOS也能够这样编译装置OpenCV。 可是假如是本地用PyCharm开发的,那么咱们编译的OpenCV,没有data阐明文件,PyChram是没有提示文件的哦~

导入C++

因为我并没有在服务器上进行过C++的项目开发,所以我就在macOS上演示,运用Clion,这儿创建空项目:

macOS和Linux上手动编译OpenCV并作为依赖添加到Python/C++/Java

之后,进入项目,编辑CMakeLists文件,原本是这样:

macOS和Linux上手动编译OpenCV并作为依赖添加到Python/C++/Java

之后增加:

macOS和Linux上手动编译OpenCV并作为依赖添加到Python/C++/Java

方便咱们仿制和更改:

cmake_minimum_required(VERSION 3.19)
project(HelloOpenCV)
set(CMAKE_CXX_STANDARD 14)
add_executable(HelloOpenCV main.cpp)
find_package(OpenCV)
include_directories(${OpenCV_INCLUDE_DIRS})
set(CMAKE_CXX_STANDARD 11)
target_link_libraries(HelloOpenCV ${OpenCV_LIBS})

之后,咱们写个测验文件看看作用:

macOS和Linux上手动编译OpenCV并作为依赖添加到Python/C++/Java

macOS和Linux上手动编译OpenCV并作为依赖添加到Python/C++/Java

导入Java

最终,咱们看看怎样导入到Java,前置条件:

  • 预编译时,需求经过Java编译

macOS和Linux上手动编译OpenCV并作为依赖添加到Python/C++/Java

假如没有满意前置条件,需求删去卸载OpenCV并删去build文件夹从头装备并编译。

满意前置条件情况下,在OpenCV装置目录下,会呈现share文件夹,其间的java文件夹便是咱们需求用到的。

翻开java文件夹:

macOS和Linux上手动编译OpenCV并作为依赖添加到Python/C++/Java

提取里边的.jar和库文件,并导入到项目内,如:

macOS和Linux上手动编译OpenCV并作为依赖添加到Python/C++/Java

最终,点击项目结构,增加libopencv_java453.dylib这个文件作为lib库。

不过,比较奇怪的是,我这儿报的信息有些奇怪,可能是我JDK版别的问题,建议咱们用JDK8:

macOS和Linux上手动编译OpenCV并作为依赖添加到Python/C++/Java

卸载OpenCV

卸载OpenCV很简略,咱们从头进入OpenCV源码目录内的build文件夹,运转:

make uninstall all

之后,OpenCV就会自动卸载完成:

macOS和Linux上手动编译OpenCV并作为依赖添加到Python/C++/Java

假如你现已删去源码文件夹,能够直接删去OpenCV编译装置目录,本文是:/usr/local/opencv

END

哈哈,竟然被你滑究竟部了?怎样样,OpenCV的装置是不是很简略?有问题能够评论区留言嗷~也欢迎进入我的博客了解更多Unix和GUN有关的内容~

macOS和Linux上手动编译OpenCV并作为依赖添加到Python/C++/Java