原文:https://blog.hwg1998.com/blog/97
操作系统:Linux version 4.18.0-240.22.1.el8_3.x86_64
编译器:gcc version 8.3.1 20191121 (Red Hat 8.3.1-5)
cmake:3.11.4
make:GNU Make 4.2.1
opencv:4.5.0
####1. 依赖关系
这里有一个小窍门,就是直接运行./configure
,看一下哪些模块是not found,然后想办法去安装相关的模块。
有的依赖是必须要有的,有的是可选的。以下是官网的必选的依赖
- GCC 4.4.x or later
- CMake 2.8.7 or higher
- Git
- GTK+2.x or higher, including headers (libgtk2.0-dev)
- pkg-config
- Python 2.6 or later and Numpy 1.5 or later with developer packages (python-dev, python-numpy)
- ffmpeg or libav development packages: libavcodec-dev, libavformat-dev,libswscale-dev
可选的:
- [optional] libtbb2 libtbb-dev
- [optional] libdc1394 2.x
- [optional] libjpeg-dev, libpng-dev, libtiff-dev, libjasper-dev,libdc1394-22-dev
- [optional] CUDA Toolkit 6.5 or higher
yum安装代码
yum install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-devyum install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
####2. 下载源码
-
方式1
官网直接下载 -> opencv官网 -
方式2
官网的一般比较慢,想要随意的选择版本的话,建议直接去github下载 -
方式3
opencv从4.0版本开始,很多算法和模块都变为可选的了,因为版权的问题。要想编译完整功能的opencv就要下载外部模块的源码一起编译,我将4.5.0的源码和可选模块都放在了gitee上,而且有很多东西,国内configure的时候会很慢,因为cmake会下载很多资源,我将这些资源都缓存好了,一起放在仓库里了,以备不时只需,能帮到其他人更好。
####3. 编译安装
简单来说,就是以下几行代码:
cmake ../opencv_src/
make
make install
ldconfig
下面详细说一下每一步
- cmake
把下载的源文件和外部模块源文件解压放在同一个目录下,源码opencv_src ,外部模块源码 opencv_contrib,另外再新建一个同级文件夹build,进入build文件夹下进行configure
cmake -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules/ -DCMAKE_INSTALL_PREFIX=/usr/local/opencv-4.5.0 -DOPENCV_GENERATE_PKGCONFIG=ON ../opencv_src/
第一个参数就是指定编译外部模块,如果想要编译特定的外部模块,就把path指向模块所在的路径就可以了。prefix指定要把opencv安装到哪里去。pkgconfig=on表示生成.pc文件。最后告诉cmake源码路径。
如果是从官网或者github下载的源码的话,可能这一步会比较耗时,耐心等待就好了。
configure完成之后大概是这个样子,然后就可以进行下一步了。
- make
这一步就是编译产生库文件和可执行的文件等等,比较耗时。
make -j4
耐心等待,有错误的话就去官网论坛看看,或者去github的那里看看,有没有人提出同样的问题。
- make install
这里是把头文件、库文件、可执行文件等等复制到目标路径下。 - ldconfig
pkg-config是一个帮助链接的工具,具体的请到官网自行了解。opencv所产生的pc文件一般是在${prefix}/lib(64)/pkgconfig/opencv(4).pc
将它复制或者添加一个软链接到/usr/lib(64)/pkgconfig
目录下,然后执 行
ldconfig #更新pgk
pkg-config opencv --modversion --cflags
如果有如下输出,则说明成功了
4.5.0
-I/usr/local/opencv-4.5.0/include/opencv4
- python
python要使用的话,需要将
${prefix}//lib/python3.6/site-packages/cv2/python-3.6/cv2.cpython-36m-x86_64-linux-gnu.so
复制到python的site-packages目录下。找不到这个文件就搜索一下。
####4. 测试
import numpy as npimport cv2print(cv2.__version__)cap = cv2.VideoCapture(0)while(True):ret,frame = cap.read()cv2.imshow('frame',frame)if cv2.waitKey(20) & 0xff == ord('q'):breakcap.release()cv2.destroyAllWindows()```运行这个python脚本,会在terminal打印opencv的版本,然后调用摄像头。q退出程序。