「这是我参与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,也很简略,给两种办法:
- 引荐在装置Homebrew的情况下,装置cmake即可。
- 装置Xcode或XcodeXcode Command Line Tools(这样就有GCC),之后装置cmake GUI,并装备cmake GUI的cmake进环境变量。
模块依靠
(本来想一个小目录里写完的。写了之后,仍是觉得这儿简略说一下,下文详解……)
模块依靠,便是你需求把OpenCV作为依靠,增加到详细什么言语的开发环境。举例:
- Python2&Python3:需求指定Python的装置路径,并在体系变量内,指明lib地址。
- Java:需求指明JAVA_HOME,需求ANT的支撑。
对其功用,一些特定依靠不赘述。(比方:ffmpeg)
OpenCV源码
咱们进入OpenCV的官网:opencv.org,找到Source Forge选项:
并下载源码。你也能够直接到GitHub上下载源码或前史版别、标签。
需求注意⚠️:下载GitHub上OpenCV很慢,你能够试试Gitee镜像,下面就演示,在服务器上下载4.5.3版别OpenCV源码:
git clone -b 4.5.3 https://gitee.com/mirrors/opencv
Cmake预编译
下载好了OpenCV的源码,接下来咱们运用Cmake进行预编译,进入OpenCV源码目录,输入:
cmake -S . -B build -DCMAKE_INSTALL_PREFIX=/usr/local/opencv
其间:
-
DCMAKE_INSTALL_PREFIX
:OpenCV的装置地址,这儿挑选装置到/sur/local/opencv
里。
之后,就会开端“跑码”预编译生成build文件夹和Markfile文件:
可是这样,咱们后续编译只能装置Python2(体系)和C++的支撑,无法支援到Python3和java。
接下来,就教咱们怎样增加Python3和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
假如你不知道怎样在Linux和macOS上装备JDK,能够参考我之前的视频教程:
- 腾讯云社区:https://cloud.tencent.com/developer/video/24850
- Bilibili:https://www.bilibili.com/video/BV1Yw411d7bU
需求特别注意⚠️,假如你的macOS或许Linux,装备了jenv,那么jenv的装备需求在JDK装备之前,比方我macOS本地就有装备jenv,需求这样编写环境变量:
之后,还需装置ANT,办法也很多,最简略的是用软件包管理器装置:
# macOS
brew install ant
# Debian/Ubuntu
sudo apt-get install ant
# CentOS
sudo yum install ant
比方:我在服务器的Debian体系上装置ANT:
装置好后,咱们仍是需求设置ANT_HOME,否则OpenCV编译时分无法读取,软件包装置的ANT:
-
/usr/share/ant
: Linux经过软件包装置ant地址(Debian服务器) -
/usr/local/Cellar/ant/{ant_version}
:macOS经过Homebrew装置
注:macOS上,经过Homebrew装置的ant,应该是不用装备ANT_HOME,Homebrew会自动装备。
之后,再到OpenCV源码内,从头预编译即可:
能够看到,这样的预编译,就有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…
装置办法很简略:下载脚本后,用默认的Shell运转即可;如:
我的装置地址是/root/anaconda3
,所以再装备一下环境变量:
之后,咱们就来配/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地址
Make编译
现在,咱们就能够正式开端编译了:
# 进入build目录
cd build
# make编译
make -j{N}
其间,{N}
取决于你有几个CPU、几个线程,比方:我的MacBook Pro:
可是,我买的服务器,是2C 4G的;所以,这儿运用:
等候编译好后,进行装置即可:
make install
又是一段“跑码“,OpenCV就装置好了。
这样编译好了,咱们怎样在开发环境运用呢?下面看看怎样运用。
导入Python
首先咱们看看怎样导入到Python,在未导入前,是这样的:
首要是,咱们的OpenCV对应编译的Python3库文件地址在:/usr/local/opencv/lib/python3.8/site-packages/cv2
(也便是OpenCV装置目录下的lib文件夹):
而咱们Python3的库文件在/root/anaconda3/lib/python3.8/site-packages
:
所以,咱们需求树立软链接:
# 仿制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也能够这样编译装置OpenCV。 可是假如是本地用PyCharm开发的,那么咱们编译的OpenCV,没有data阐明文件,PyChram是没有提示文件的哦~
导入C++
因为我并没有在服务器上进行过C++的项目开发,所以我就在macOS上演示,运用Clion,这儿创建空项目:
之后,进入项目,编辑CMakeLists
文件,原本是这样:
之后增加:
方便咱们仿制和更改:
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})
之后,咱们写个测验文件看看作用:
导入Java
最终,咱们看看怎样导入到Java,前置条件:
- 预编译时,需求经过Java编译
假如没有满意前置条件,需求删去卸载OpenCV并删去build
文件夹从头装备并编译。
满意前置条件情况下,在OpenCV装置目录下,会呈现share
文件夹,其间的java
文件夹便是咱们需求用到的。
翻开java
文件夹:
提取里边的.jar
和库文件,并导入到项目内,如:
最终,点击项目结构,增加libopencv_java453.dylib
这个文件作为lib库。
不过,比较奇怪的是,我这儿报的信息有些奇怪,可能是我JDK版别的问题,建议咱们用JDK8:
卸载OpenCV
卸载OpenCV很简略,咱们从头进入OpenCV源码目录内的build文件夹,运转:
make uninstall all
之后,OpenCV就会自动卸载完成:
假如你现已删去源码文件夹,能够直接删去OpenCV编译装置目录,本文是:/usr/local/opencv
END
哈哈,竟然被你滑究竟部了?怎样样,OpenCV的装置是不是很简略?有问题能够评论区留言嗷~也欢迎进入我的博客了解更多Unix和GUN有关的内容~