Ubuntu下,OpenCV的安装方式有两种:
conda install opencv=4.2.0 -c conda-forge
conda install -c conda-forge/label/gcc7 opencv
conda install -c conda-forge/label/broken opencv
conda install -c conda-forge/label/cf201901 opencv
conda install -c conda-forge/label/cf202003 opencv
如果出现问题就重新创建一个环境,再执行该代码。
备注:(conda search opencv )或者conda search opencv -c conda-forge 查询conda中支持的包。
方式1.很简单: 如果你只是在python中简单使用opencv,首选此种方式安装,如果你需要在其他项目中编译引用opencv,建议从源码构建安装;还有一点:python-opencv里的代码可能没有源码更新的及时,从源码构建虽然复杂,不过稳定些、可控性更强。下文主要介绍通过源码构建安装OpenCV。
1.安装依赖包
[required] sudo apt-get install build-essential
[required] sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
[optional] sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
安装python2、python3支持模块
可选、譬如你可以只打算在python3里用opencv,那么就忽略python2的模块安装。
# 安装python2支持
sudo apt-get install python-dev python-numpy
# 安装python3支持
sudo apt-get install python3-dev python3-numpy
GTK支持(图形界面库)
# 安装gtk2支持
sudo apt-get install libgtk2.0-dev
# 安装gtk3支持
sudo apt-get install libgtk-3-dev
2.下载OpenCV 4.2.0和OpenCV Contrib 4.2.0
|
假如将两个压缩包保存到/home/username/opencv4.2/
,进行解压;
另外,在编译的时候需要ippicv_2019_lnx_intel64_general_20180723.tgz
这个文件,下载的时候会特别慢。这里提供一个链接,参考其中的第1,2两个步骤进行下载与配置;
如,我将下载得到的文件放在了opencv4.2
这个文件夹中,修改成"/home/username/opencv4.2/"
;
目录结构如下:
/home/username/opencv4.2/目录下有
opencv-4.2.0/
opencv_contrib-4.2.0/
ippicv_2019_lnx_intel64_general_20180723.tgz
3. Building OpenCV from Source Using CMake (使OpenCV能CUDA加速)
支持使用CUDA对DNN模块进行加速计算,所以这里配置CUDA
默认位置安装,则会安装到系统如下目录:
bin下的可执行文件:。lib是库文件,主要是以libopencv开头的so文件、文件夹:pkgconfig、python2.x、python3.x(pkgconfig里存放的是opencv4.pc);share里就两个文件夹:OpenCV和licenses。
本文安装在/usr/local/opencv4 (即为OPENCV_DIR_PATH)下 (非默认位置安装)。
cd /home/username/opencv4.2/opencv-4.2.0
mkdir build
cd build
sudo cmake -D CMAKE_INSTALL_PREFIX=/usr/local/opencv4\
-D CMAKE_BUILD_TYPE=RELEASE\
-D INSTALL_PYTHON_EXAMPLES=ON\
-D INSTALL_C_EXAMPLES=ON\
-D OPENCV_EXTRA_MODULES_PATH=/modules\
-D BUILD_EXAMPLES=ON\
-D OPENCV_GENERATE_PKGCONFIG=ON ..
4. 使用make构建库
查看CPU核心数:
nproc
如,我的CPU核心数为12,执行
cd /home/username/opencv4.2/opencv-4.2.0/build
sudo make -j12
等待一段时候,出现Configuration Done
即可,
执行:
sudo make install
【非默认位置安装,需设置扫描路径】步骤如下:
项目编译后产生的可执行文件、库文件、头文件需要被别的项目引用,扫描路径怎么设置?也有两种方式:
OpenCV编译后会在/OPENCV_DIR_PATH/lib/pkgconfig/下产生opencv.pc文件.
prefix定义了编译安装的主目录;exec_prefix则是可执行文件目录;然后还有include文件夹目录等等。
通过/usr/bin/下的pkg-config命令,会扫描所有系统/usr/lib/下和环境变量PKG_CONFIG_PATH所定义的所有pkgconfig文件夹,这些文件夹都是存放各个程序编译信息.pc文件,pkg-config扫描后,这些.pc文件保存的编译信息就能被其他项目/程序获取。(.pc文件主要定义了安装程序的主目录prefix、可执行程序目录exec_prefix、lib目录libdir、包含目录includedir、sharedlibdir等,有点类似于环境变量,不过更多是为了程序编译服务的)
# 查看所有系统将会扫描的pkgconfig文件夹路径;
pkg-config --variable pc_path pkg-config
#根据opencv.pc查看其有那些路径变量
pkg-config --print-variables opencv
#查看opencv.pc中prefix变量的值(即其编译安装的位置)
pkg-config --variable prefix opencv
自定义安装,我们会在/OPENCV_DIR_PATH/lib/pkgconfig/下发现opencv.pc。
两种配置方式选择:
4.1. 复制opencv.pc至系统pkgconfig文件夹中 理论上可以将opencv.pc复制到任意一个 pkg-config --variable pc_path pkg-config
列出的pkgconfig文件夹中,不过最好复制到/usr/local/lib/pkgconfig/下。 例:
cd /OPENCV_DIR_PATH/lib/pkgconfig
sudo cp opencv.pc /usr/lib/pkgconfig
Ubuntu18.04安装后,系统自带了opencv3.2.0,默认将opencv.pc存放在/usr/lib/x86_64-linux-gnu/pkgconfig/下,如果需要将opencv.pc复制到这里,可以先将系统自带的opencv.pc备份下,然后再cp过去。
4.2.将opencv.pc所在目录设定到环境变量PKG_CONFIG_PATH
#修改bash.bashrc文件
sudo vim /etc/bash.bashrc
# 在最后加入:
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/OPENCV_DIR_PATH/lib/pkgconfig
export PKG_CONFIG_PATH
source /etc/bash.bashrc
#查看变量是否生效
echo $PKG_CONFIG_PATH
5. 配置环境变量两项
5.1 设置Python的cv2包的环境变量
1.设置OpenCV的环境变量(可选,不建议) 如果编译时默认安装的位置是系统bin和lib文件夹、所以可执行文件和lib文件都可以立即执行。譬如:opencv_version这个可执行程序,由于其路径属于系统路径:usr/bin/opencv_version,故可以在任意shell窗口中直接运行,自定义位置安装的则不可以。故可以为其设置环境变量,不过通常也不需要,原因有两点:1.opencv的可执行命令较少2.通常我们编译OpenCV并不是为了得到其可执行文件,而是为了得到lib文件夹中的.so库文件,供其他程序/项目直接引用。
2.设置Python的cv2包的环境变量(必须) 自定义位置编译时,可能会出现一种情况,编译成功、安装成功,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
#如:export PYTHONPATH=$PYTHONPATH:/usr/local/opencv/opencv-3.4.8/lib/python3.6/dist-packages
source ~/.bashrc
然后,我们就可以正常在python环境中import cv2了。
5.2将opencv的lib路径添加到配置
主要是将opencv的lib路径添加到配置,能被系统扫描到,有什么用?其他项目,如darknet构建时需要用到opencv的lib,就可以直接引用到。
sudo gedit /etc/ld.so.conf.d/opencv.conf
将你opencv安装目录/lib路径写入opencv.conf,并保存。如果你编译时是默认安装,路径是: /usr/local/lib。添加如下内容,并保存:
/usr/local/lib
配置库
sudo ldconfig
重启系统 (备选)
reboot
测试安装情况,查看安装版本
pkg-config opencv4 --modversion
# or
pkg-config --cflags --libs opencv4
若报错如下信息:
Package opencv was not found in the pkg-config search path.
Perhaps you should add the directory containing `opencv.pc'
to the PKG_CONFIG_PATH environment variable
No package 'opencv' found
执行:sudo apt install libopencv-dev
7、卸载openCV
如果安装出现了百度不能解决的问题。最好的办法就是卸载重新装一次。
// 1. 删除openCV4.conf
1 cd /etc/ld.so.conf.d/
2 sudo rm opencv4.conf
// 2.卸载
1 cd
2 cd ./OpenCV-4.1.1/build
3 sudo make uinstall
sudo rm -r /usr/local/include/opencv4
sudo rm -r /usr/local/include/opencv
sudo rm -r /usr/include/opencv
sudo rm -r /usr/include/opencv4
sudo rm -r /usr/local/share/opencv
sudo rm -r /usr/local/share/OpenCV
sudo rm -r /usr/share/opencv
sudo rm -r /usr/share/OpenCV
sudo rm -r /usr/local/bin/opencv*
sudo rm -r /usr/local/lib/libopencv*
sudo rm -r /usr/local/lib/pkgconfig/opencv4.pc
sudo rm -r /usr/local/lib/cmake/opencv4
1. 安装 libgtk2.0-dev
sudo apt-get install libgtk2.0-dev
报错如下:
The following packages have unmet dependencies:
libgtk2.0-dev : Depends: libpango1.0-dev (>= 1.20) but it is not going to be installed
Depends: libcairo2-dev (>= 1.6.4-6.1) but it is not going to be installed
解决方案 一:
1、修改配置Software Sources:
ubuntu 中打开Software & Updates(界面如下), 勾选Important security updates 和Recommended updates 选项。
2、 更新apt-get,并安装libgtk2.0-dev
sudo apt-get update
sudo apt-get install libgtk2.0-dev
2、安装 libjasper-dev:
在安装libjasper-dev依赖包的过程中错误如下:
E: Unable to locate package libjasper-dev
执行:
sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt-get update
再次执行安装依赖包;