OpenCV
OpenCV的全称是Open Source Computer Vision Library,是一个跨平台的计算机视觉库。OpenCV是由英特尔公司发起并参与开发,以BSD许可证授权发行,可以在商业和研究领域中免费使用。OpenCV可用于开发实时的图像处理、计算机视觉以及模式识别程序。该程序库也可以使用英特尔公司的IPP进行加速处理。
OpenCV也广泛运用于图片识别、图片处理等场景,被称为“计算机视觉”嗷。
使用场景
OpenCV的使用场景很多,包括但不限于:
- 增强现实
- 人脸识别
- 手势识别
- 人机交互
- 动作识别
- 运动跟踪
- 物体识别
- 图像分割
具体使用
OpenCV其实就是一个C 的库,但是Python和Java也是有接口可以进行调用。本次教程,就交大家编译安装openCV的C 库,大家也可以根据自己需求,选择是否编译Python和Java的接口。
Python内,其实可以用pip直接安装的嗷。本文就不介绍了,主要讲解手动编译配置。
本次演示
本次演示,是在macOS和Linux上编译并安装OpenCV,Windows不在本教程范围内。
Linux上,使用腾讯云轻量应用服务器,不管是CentOS还是Debian都可以安装,但是最好提前更新一次软件源:
代码语言:shell复制# Debian/Ubuntu
apt update
apt upgrade
# CentOS
yum update
yum upgrade
PS:最近腾讯云还可以74元买2C 4G 8M的豪华配置嗷:https://curl.mintimate.cn/1HNliDcIwNz
环境依赖
编译OpenCV需要添加一些依赖,否则无法编译或Cmkae自动配置。这里我初略分为必要依赖和模块依赖:
- 必要依赖:编译OpenCV时一定需要的依赖。
- 模块依赖:编译OpenCV时候,选择的依赖;如:需要对Java提供支持,需要安装ant。
一些可选支持,比如:libpng包、libjepg包等等,这里也不做详细说明嗷。
必要依赖
这里的必要依赖为GCC和Cmake,否则无法进行编译。在Linux上安装GCC和Cmake,根据发行版本的不同:
代码语言:shell复制# 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的官网:https://opencv.org,找到Source Forge选项:
并下载源码。你也可以直接到GitHub上下载源码或历史版本、标签。
需要注意⚠️:如果你的腾讯云轻量应用服务器和我一样,下载GitHub上OpenCV很慢,你可以试试Gitee镜像,下面就演示,在腾讯云轻量应用服务器上下载4.5.3版本OpenCV源码:
代码语言:txt复制git clone -b 4.5.3 https://gitee.com/mirrors/opencv
Cmake预编译
下载好了OpenCV的源码,接下来我们使用Cmake进行预编译,进入OpenCV源码目录,输入:
代码语言:txt复制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,方法也很多,最简单的是用软件包管理器安装:
代码语言:txt复制# 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地址(腾讯云轻量应用服务器)/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安装:
代码语言:shell复制# macOS
brew install anaconda
当然,也可以和Linux一样,使用Anaconda的脚本:
- https://docs.anaconda.com/anaconda/install/index.html(https
官网可能对大陆服务器不是很友好,可以用清华镜像下载源:
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/
安装方法很简单:下载脚本后,用默认的Shell运行即可;如:
我的安装地址是/root/anaconda3
,所以再配置一下环境变量:
之后,我们就来配/root/anaconda3/bin/python3
这个Python3:
重新运行cmake:
代码语言:txt复制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
:激活Python3DPYTHON_DEFAULT_EXECUTABLE
:指定Python3地址
Make编译
现在,我们就可以正式开始编译了:
代码语言:txt复制# 进入build目录
cd build
# make编译
make -j{N}
其中,{N}
取决于你有几个CPU、几个线程,比如:我的MacBook Pro:
但是,我买的腾讯云轻量应用服务器,是2C 4G的;所以,这里使用:
等待编译好后,进行安装即可:
代码语言:txt复制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
:
所以,我们需要建立软链接:
代码语言:txt复制# 复制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
文件,原本是这样:
之后添加:
方便大家复制和更改:
代码语言:txt复制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文件夹,运行:
代码语言:txt复制make uninstall all
之后,OpenCV就会自动卸载完成:
如果你已经删除源码文件夹,可以直接删除OpenCV编译安装目录,本文是:/usr/local/opencv
END
哈哈,居然被你滑到底部了?怎么样,OpenCV的安装是不是很简单?有问题可以评论区留言嗷~也欢迎进入我的博客了解更多Unix和GUN有关的内容~