macOS和Linux上手动编译OpenCV并作为依赖添加到Python/C++/Java
本文最后更新于 2023年9月17日 上午
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上,使用腾讯云轻量应用服务器,不管是CentOS还是Debian都可以安装,但是最好提前更新一次软件源:
1 |
|
辅助视频
嘿嘿,做教程视频不易(B站根本不会推荐引流),请务必一键三连嗷~B站视频地址:https://www.bilibili.com/video/BV12U4y1K7oW
环境依赖
编译OpenCV需要添加一些依赖,否则无法编译或Cmkae自动配置。这里我初略分为必要依赖和模块依赖:
- 必要依赖:编译OpenCV时一定需要的依赖。
- 模块依赖:编译OpenCV时候,选择的依赖;如:需要对Java提供支持,需要安装ant。
一些可选支持,比如:libpng包、libjepg包等等,这里也不做详细说明嗷。
必要依赖
这里的必要依赖为GCC和Cmake,否则无法进行编译。在Linux上安装GCC和Cmake,根据发行版本的不同:
1 |
|
如:使用腾讯云轻量应用服务器的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源码:
1 |
|
Cmake预编译
下载好了OpenCV的源码,接下来我们使用Cmake进行预编译,进入OpenCV源码目录,输入:
1 |
|
其中:
DCMAKE_INSTALL_PREFIX
:OpenCV的安装地址,我这里选择安装到/usr/local/opencv
里(看个人习惯)。
之后,就会开始“跑码”预编译生成build文件夹和Markfile文件:
但是这样,我们后续编译只能安装Python2(系统)和C++的支持,无法支援到Python3和java。
接下来,就教大家怎么添加Python3和java依赖。
添加依赖
要添加对Java或者Python的依赖,就需要重新预编译。所以,你需要删除刚刚预编译出来的build
文件夹:
1 |
|
Java
Java的配置很简单,首先是安装并配置JDK,尤其是是配置JAVA_HOME
,如:
1 |
|
如果你不知道怎么在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,方法也很多,最简单的是用软件包管理器安装:
1 |
|
比如:我在腾讯云轻量应用服务器的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会自动配置。
你也可以进入ant的源码下载页面:https://ant.apache.org/bindownload.cgi,手动配置到环境变量:
1 |
|
之后,再到OpenCV源码内,重新预编译即可:
可以看到,这样的预编译,就有JDK支持了。
Python3
Python3的部署,会复杂一些。我建议不要动系统的Python3,macOS和Linux都安装Anaconda,用Anaconda的Python3比较好。macOS的Anaconda,还是和上文一样,可以用Homebrew安装:
1 |
|
当然,也可以和Linux一样,使用Anaconda的脚本:
官网可能对大陆服务器不是很友好,可以用清华镜像下载源:
安装方法很简单:下载脚本后,用默认的Shell运行即可;如:
我的安装地址是/root/anaconda3
,所以再配置一下环境变量:
之后,我们就来配/root/anaconda3/bin/python3
这个Python3:
重新运行cmake:
1 |
|
其中:
DCMAKE_INSTALL_PREFIX
:OpenCV安装地址。BUILD_opencv_python3
:激活Python3DPYTHON_DEFAULT_EXECUTABLE
:指定Python3地址
Make编译
现在,我们就可以正式开始编译了:
1 |
|
其中,{N}
取决于你有几个CPU、几个线程,比如:我的MacBook Pro:
但是,我买的腾讯云轻量应用服务器,是2C 4G的;所以,这里使用:
等待编译好后,进行安装即可:
1 |
|
又是一段“跑码“,OpenCV就安装好了。
这样编译好了,我们怎么在开发环境使用呢?下面看看怎么使用。
导入Python
首先我们看看怎么导入到Python,在未导入前,是这样的:
主要是,我们的OpenCV对应编译的Python3库文件地址在:/usr/local/opencv/lib/python3.8/site-packages/cv2
(也就是OpenCV安装目录下的lib文件夹):
而我们Python3的库文件在/root/anaconda3/lib/python3.8/site-packages
:
所以,我们需要建立软链接:
1 |
|
之后,在Python内就可以使用了:
当然,macOS也可以这样编译安装OpenCV。
但是如果是本地用PyCharm开发的,那么我们编译的OpenCV,没有data说明文件,PyChram是没有提示文件的哦~
导入C++
因为我并没有在腾讯云轻量应用服务器上进行过C++的项目开发,所以我就在macOS上演示,使用Clion,这里创建空项目:
之后,进入项目,编辑CMakeLists
文件,原本是这样:
之后添加:
方便大家复制和更改:
1 |
|
之后,我们写个测试文件看看效果:
导入Java
最后,我们看看怎么导入到Java,前置条件:
- 预编译时,需要通过Java编译
如果没有满足前置条件,需要删除卸载OpenCV并删除build
文件夹重新配置并编译。
满足前置条件情况下,在OpenCV安装目录下,会出现share
文件夹,其中的java
文件夹就是我们需要用到的。
打开java
文件夹:
提取里面的.jar
和库文件,并导入到项目内,如:
最后,点击项目结构,添加libopencv_java453.dylib
这个文件作为lib库。
不过,比较奇怪的是,我这里报的信息有些奇怪,可能是我JDK版本的问题,建议大家用JDK8:
卸载OpenCV
卸载OpenCV很简单,我们重新进入OpenCV源码目录内的build文件夹,运行:
1 |
|
之后,OpenCV就会自动卸载完成:
如果你已经删除源码文件夹,可以直接删除OpenCV编译安装目录,本文是:/usr/local/opencv
END
哈哈,居然被你滑到底部了?怎么样,OpenCV的安装是不是很简单?有问题可以评论区留言嗷~也欢迎进入我的博客了解更多Unix和GUN有关的内容~