【参考链接:ubuntu16.04安装opencv3.4_mjiansun的专栏-CSDN博客】
OpenCV是一个跨平台的计算机视觉库。OpenCV提供了众多语言的接口,其中就包含了Python。
OpenCV的官方下载网址是http://opencv.org/releases.html
安装版本:ubuntu20.04;
opencv:3.3.1
//软件源更新
sudo apt-get update //更新包管理
sudo apt-get upgrade //升级预装的包
sudo apt-get install build-essential
sudo apt-get install g++-4.4 //安装g++ 4.4版本,4.4前面的-号可以删除
gcc --version //查看gcc版本
g++ --version //查看g++版本
//安装cmake、git和pkg-config
sudo apt-get install cmake git pkg-config
//安装jpeg格式图像工具包
sudo apt-get install libjpeg8-dev
//安装tif格式图像工具包
sudo apt-get install libtiff5-dev
//安装JPEG-2000图像工具包
sudo apt-get install libjasper-dev
//安装png图像工具包
sudo apt-get install libpng12-dev
libjasper-dev和libgtk2.0-dev是OpenCV的两个很重要的包,OpenCV安装libjasper-dev依赖包出现如下错误:
(base) lutos@lutos-virtual-machine:~$ sudo apt-get install libjasper-dev
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
E: 无法定位软件包 libjasper-dev
解决方法:
sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt update
sudo apt install libjasper1 libjasper-dev
5、安装视频I/O包
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
//最后一个包的数字4后面是l
sudo apt-get install libxvidcore-dev libx264-dev
//opencv的GUI是highgui,其依赖于GTK库,需要安装gtk
sudo apt-get install libgtk-3-dev //或者
sudo apt-get install libgtk2.0-dev
sudo apt-get install libatlas-base-dev gfortran //用于优化OpenCV内部函数,如矩阵操作
安装完编译所依赖的packages之后,下一步就是开始编译了。不过还需要在解压后的OpenCV-xxxx文件夹内建立一个build文件夹,编译生成的makefiles、project files、object files和output files,完成后就可以开始正式的编译了。
在解压的opencv-xxx目录下创建build文件夹,并从终端进入build文件夹
cd /……/opencv-3.3.1/build //……是安装路径
可通过cmake命令或者cmake-gui界面配置,建议安装cmake-gui进行编译安装:
sudo cmake-gui
参考【Ubuntu18:使用CMake-gui编译OpenCV3源码的详细过程_Flag_ing的博客-CSDN博客】
选择源码及二进制文件位置,点击Configure按钮,选择Unix Makefiles,其他默认,再点击Finish。
configuring done之后,
在这里要找到这几个地方进行修改;
1、勾选上BUILD_opencv_world;
2、在CMAKE_BUILD_TYPE后填上:RELEASE;
3、如果是安装的opencv-contrib版本,需要在OPENCV_EXTRA_MODULES_PATH后填上opencv-contrib/modules的路径,比如:/home/wsx/opencv/opencv/opencv_contrib/modules
拓展库可去GitHub找
https://github.com/opencv/opencv_contrib/tree
再次点击Configure按钮,完成后,再点击Generate按钮。
若用cmake命令配置,可参考如下(但容易出问题)
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
//CMAKE_BUILD_TYPE: build的类型,有Release和Debug两种
//CMAKE_INSTALL_PREFIX: 指定想要安装OpenCV的文件夹目录,一般就用/usr/local
//最后面有两个点
//其他配置
cmake -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D WITH_QT=ON -D WITH_OPENGL=ON ..
通过make编译结束后在bulid的lib目录下生成*.so库文件。
sudo make
或者
sudo make -j7 //同时使用7个线程。为了加快编译速度,一般会使用多线程的方法
//查看本机支持多少线程数,终端中输入
nproc
等待漫长的编译过程。出现报错就按照提示逐一解决。
出现错误及解决办法
1、报错 error: 'CODEC_FLAG_GLOBAL_HEADER' was not declared in this scope
参考【Ubuntu 源码安装opencv320 报错 error: 'CODEC_FLAG_GLOBAL_HEADER' was not declared in this scope_guo_lei_lamant的博客-CSDN博客】
找到报错提示的位置,在 /opt/opencv/opencv-3.2.0/modules/videoio/src/cap_ffmpeg_impl.hpp 里最顶端添加:
#define AV_CODEC_FLAG_GLOBAL_HEADER (1 << 22)
#define CODEC_FLAG_GLOBAL_HEADER AV_CODEC_FLAG_GLOBAL_HEADER
#define AVFMT_RAWPICTURE 0x0020
make成功后,就可以进行安装
sudo make install
库文件装到了/usr/local/lib下
至此,OpenCV的编译安装过程就结束了。
接下来可能还需要配置一些编译环境,添加库。
1、动态库(共享库)配置。添加库路径,并更新系统库
//为动态库(共享库)的配置
sudo /bin/bash -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf'
//加载使配置生效,
sudo ldconfig
关于动态静态库可参考【静态库和动态库的区别 - 阿玛尼迪迪 - 博客园】
2、配置opencv的PKG-CONFIG环境
//将/usr/local/lib/pkgconfig路径加入到PKG_CONFIG_PATH中
sudo gedit /etc/bash.bashrc
//在末尾添加如下语句,然后保存,退出
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
说明2:
#1、添加库路径(创建opencv.conf文件)
//打开配置文件
sudo gedit /etc/ld.so.conf.d/opencv.conf
//打开可能是个空文件,不用管,在文件末尾添加
/usr/local/lib
//保存后,执行如下命令使刚才的配置路径生效
sudo ldconfig //更新系统库缓存
#2、添加环境变量,可通过/etc/profile、/etc/bash.bashrc、~/.bashrc等三种方式配置
//配置bash
sudo gedit /etc/bash.bashrc
//在最末尾添加
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
//保存,执行以下命令使配置生效
source /etc/bash.bashrc
//查看opencv是否安装成功
pkg-config --cflags opencv
pkg-config --libs opencv
//查看linux下的opencv安装版本
pkg-config opencv --modversion
//测试XXX.cpp实现显示图像,输入命令
g++ XXX.cpp -o XXX `pkg-config --cflags --libs opencv`
至此,所有配置都已经完成。
如果到现在你还没遇到任何问题,那么恭喜你,你已经成功在Linux上安装了OpenCV。
下面用一个小程序测试一下
cd到opencv-3.X.X/samples/cpp/example_cmake目录下,可以看到这个目录里官方已经给出了一个cmake的example,我们来测试下
cmake . //加上sudo
make //加上sudo
./opencv_example
即可看到打开了摄像头,在左上角有一个hello opencv,即表示配置成功。
在build路径下打开终端,依次执行
sudo make uninstall
cd ..
sudo rm -r build
sudo rm -r /usr/local/include/opencv2 /usr/local/include/opencv /usr/include/opencv /usr/include/opencv2 /usr/local/share/opencv /usr/local/share/OpenCV /usr/share/opencv /usr/share/OpenCV /usr/local/bin/opencv* /usr/local/lib/libopencv*