目录
1、安装依赖项
2、源码安装
3、使用cmake gui编译
3、自定义安装
4、路径配置
4.1、设置扫描路径
4.2、设置python环境变量
4.3、添加Lib添加进环境变量
5、验证
6、卸载
系统环境:ubuntu18.04、opencv4.4.0。
未使用cuda、dnn、opencv_contrib,配置环境变量的验证过程。
1、安装依赖项
step1、cmake gcc g++等系统工具
sudo apt-get install cmake gcc g++ build-essential pkg-config -y
step2、安装python2、python3支持模块
sudo apt-get install python-dev python-numpy -y # python2及对应numpy
sudo apt-get install python3-dev python3-numpy -y # python3及对应numpy
一句话合并:
sudo apt-get install python-dev python-numpy python3-dev python3-numpy -y
step3、GTK支持(图形界面库)
# 安装gtk支持
sudo apt-get install libgtk2.0-dev -y # gtk2支持python2
sudo apt-get install libgtk-3-dev -y # gtk3支持python3
一句话合并:
sudo apt-get install libgtk2.0-dev libgtk-3-dev -y
step4、图片支持库
sudo apt-get install -y libjpeg8-dev libjasper-dev libpng12-dev libtiff5-dev libavcodec-dev libavformat-dev libswscale-dev libdc1394-22-dev libxine2-dev libv4l-dev -y
注意:若使用的是Ubuntu 16.04,可以安装libjasper-dev 以支持JPEG2000格式。
step5、安装gstreamer插件(视频解码)
sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev -y
step6、其它库
sudo apt-get install qt-sdk libavcodec-dev libavformat-dev libswscale-dev libtbb2 libtbb-dev libjasper-dev libdc1394-22-dev -y
sudo apt-get install libgtk2.0-dev libtbb-dev libatlas-base-dev libfaac-dev libmp3lame-dev libtheora-dev libvorbis-dev libxvidcore-dev libopencore-amrnb-dev libopencore-amrwb-dev x264 v4l-utils
2、源码安装
浏览器中下载:
opencv:https://codeload.github.com/opencv/opencv/zip/refs/tags/4.4.0
opencv_contrib:https://codeload.github.com/opencv/opencv_contrib/zip/refs/tags/4.4.0
下载后,解压,opencv_contrib放置在opencv-4.4.0目录下。扩展包opencv_contrib根据需要下载。新建build目录,用于构建文件。对应目录组织结构如下:
# 新建build文件夹,存放构建文件
mkdir build
cd build
3、使用cmake gui编译
sudo apt-get install cmake-qt-gui
进入目录,打开gui界面:
cd opencv-4.4.0 # 进入opencv源代码目录
mkdir build # 创建一个build文件夹,用于存放生成的代码
cd build
cmake-gui .. # 启动cmake-gui
界面如下:
点击configure,选择unix makefiles,再点finish完成一次configure。
结果如下图,勾选grouped方便查看配置项:
点击configure后,查看编译log,一般会有很多错误,依次处理。
3、自定义安装
增加相应的设置:主要是设置扫描路径和设置环境变量。
step1、cmake参数配置
第一项:指定安装路径。完整安装至该目录
CMAKE_INSTALL_PREFIX = "/usr/local/opencv440" # 指定安装路径
譬如,自定义目录:/usr/local/opencv440 ,下文用OPENCV_DIR_PATH代表。则安装到以下位置:
- /usr/local/opencv440/bin
- /usr/local/opencv440/lib
- /usr/local/opencv440/share
- /usr/local/opencv440/inlcude
OPENCV_DIR_PATH=/usr/local/opencv440
若未指定,默认路径为:
第二项:配置第三方库目录。(可选项, 使用常见功能,不选)
OPENCV_EXTRA_MODULES_PATH = "/home/tools/opencv440/opencv-4.4.0/opencv_contrib-4.4.0" # 第三方库
勾选:
PENCV_GENERATE_PKGCONFIG:生成opencv config文件,方便系统调用和查找。默认否。
可选项:
WITH_CUDA:是否使用GPU。默认否。
OPENCV_PYTHON3_VERSION:是否添加 进入python3。默认否。
OPENCV_DNN_CUDA:是否 DNN支持CUDA。默认否。
BUILD_opencv_python2:是否编译python2 cv2,默认是。
BUILD_opencv_python3:是否编译python3 cv2,默认是。
BUILD_opencv_dnn:是否使用DNN,默认否。
PS:勾选配置完毕 ,再次点击configure、generate按钮。出现Configuring done、Generating done后,进行编译、安装。
step2、编译、安装
# cd build
make -j8 # 编译
sudo make install # 安装
4、路径配置
默认安装路径则不需要设置。
4.1、设置扫描路径
这块主要针对自定义位置安装,项目编译后产生的可执行文件、库文件、头文件需要被别的项目引用,扫描路径怎么设置?
将opencv.pc所在目录设定到环境变量PKG_CONFIG_PATH。(opencv2/3编译后产生opencv.pc,opencv4编译后产生opencv4.pc)。
OpenCV编译后会在/OPENCV_DIR_PATH/lib/pkgconfig/下产生opencv.pc文件。添加opencv.pc至配置路径后,即可被系统工具pkg-config扫描出来。
自定义安装,我们会在/OPENCV_DIR_PATH/lib/pkgconfig/下发现opencv4.pc。将opencv4.pc所在目录设定到环境变量PKG_CONFIG_PATH。
注:原文写到修改/etc/bash.bashrc,本文改为修改~/.bashrc文件。
sudo vim ~/.bashrc
# 在最后加入:
# opencv path
export OPENCV_DIR_PATH=/usr/local/opencv440
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$OPENCV_DIR_PATH/lib/pkgconfig
# 使修改生效
source ~/.bashrc
#查看变量是否生效
echo $PKG_CONFIG_PATH
check1、检查opencv.pc路径是够正确(即其编译安装的位置),与opencv.pc读取有关:
pkg-config --variable prefix opencv4 # 输出:/usr/local/opencv440
4.2、设置python环境变量
编译成功安装成功,OpenCV的c++demo也可以正常运行,但是进入python环境import cv2时会发现找不到包。因为自定义编译时,生成的cv2模块路径是: /OPENCV_DIR_PATH/lib/python3.6/dist-packages 需要将此路径设置加入环境变量PYTHONPATH中,以便于python环境中import时可以找到cv2。
# 新增PYTHONPATH环境变量
sudo vim ~/.bashrc
export PYTHONPATH=$PYTHONPATH:/OPENCV_DIR_PATH/lib/python3.6/dist-packages:/OPENCV_DIR_PATH/lib/python2.7/dist-packages
source ~/.bashrc
然后,我们就可以正常在python环境中import cv2了。
check2、python环境变量是否设置正确。
安装好还需要进行配置,见下面【配置】一节。
PS:此处再次验证时有问题,贴图占位。
4.3、添加Lib添加进环境变量
主要是将opencv的lib路径添加到配置,能被系统扫描到,有什么用?其他项目,如darknet构建时需要用到opencv的lib,就可以直接引用到。
cd /etc/ld.so.conf.d
ls # 若已有opencv.conf则修改,无则创建
sudo vim opencv4.conf
将你opencv安装目录/lib路径写入opencv4.conf,并保存。如果你编译时是默认安装,路径是: /usr/local/lib。
保存后刷新,使配置生效:
# 刷新lib库目录
sudo ldconfig
# 刷新目录缓存
sudo /sbin/ldconfig
有的教程写的是:编辑/etc/ld.so.conf,在最后加入 include /usr/local/lib,效果一样。
5、验证
check3、查看版本。
方式一:shell中直接查看
pkg-config opencv4 --modversion # 注,opencv2/3系列默认为opencv.pc
方式二:python中查看
>>>import cv2
>>>cv2.__version__
C++ demo测试:
找到你的opencv源码包,假如是opencv-4.4.0,cd到opencv-4.4.0/samples/cpp/example_cmake/下执行官方给出的demo,需要执行cmake和make来编译cpp文件:
make
./opencv_example
PS:本机同时安装opencv3与opencv4,这里需要修改makefile中opencv改为opencv4。
执行demo会调用打开Sample窗口,并调用你本地摄像头显示画面,没有摄像头画面如下:
如果你是自定义路径安装的,请注意一下: 看一下CmakeLists.txt的内容:
你需要设置变量OpenCV_DIR来找到OpenCVConfig.cmake文件的位置。通常如果你是执行默认位置安装,那么系统默认路径为:/usr/share/OpenCV/OpenCVConfig.cmake。如果你是自定义位置安装,需要通过在CmakeLists.txt中设置OpenCV_DIR变量的路径,来定位到你的Opencv目录,譬如:
set(OpenCV_DIR /usr/local/opencv440/share/OpenCV/)
6、卸载
卸载相比安装,容易了许多,还是cd到opencv源码主目录/build文件夹下 sudo make uninstall。
1)执行sudo make uninstall可将opencv相关的可执行文件、lib文件等,从OPENCV_DIR_PATH/bin/、OPENCV_DIR_PATH/lib、OPENCV_DIR_PATH/share中删除,不过还是会留空下文件夹,需要手动删除。
2)继续执行:sudo make clean 将源码包内的编译相关文件删除、最后在build文件夹内执行sudo rm rf *删除源码包内所有文件。