opencv笔记:ubuntu安装opencv以及多版本共存

跑CV程序少不了opencv,然后最近实践的时候发现opencv似乎不是向后兼容的(opencv4.0跑不了opencv2.4的),于是还是记录一下,后期改也方便。

References

电子文献:
https://blog.csdn.net/new_delete_/article/details/84797041?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
https://www.jianshu.com/p/f646448da265
https://blog.csdn.net/learning_tortosie/article/details/80594399


安装流程

本节以opencv4.0为例,记录一下在ubuntu18.04上安装的流程。此方法经检验,同样适用于opencv2.4。

准备

cmake

首先要确保系统已经安装了cmake,没有的话请sudo apt-get install cmake或者源码编译最新版。

依赖库

1
sudo apt-get install build-essential libgtk2.0-dev libgtk-3-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev libtiff5-dev

支持python

1
2
3
4
5
6
7
8
#python3支持
sudo apt install python3-dev python3-numpy

#streamer支持
sudo apt install libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev

#可选的依赖
sudo apt install libpng-dev libopenexr-dev libtiff-dev libwebp-dev

下载源文件

可以到官网或者github上去下载源文件(官网版本选择在下方翻页,github上通过tag选择)。
推荐使用github下载,相对会快一些。

安装

解压源文件并进入。

1
2
unzip opencv-4.0.0.zip
cd opencv-4.0.0/

创建编译文件夹并进入。

1
2
mkdir build
cd build/

cmake

opencv最好装在/usr/local目录下,为了后期方便,我将不同版本的opencv再独立键一级目录。

1
cmake -D CMAKE_BUILD_TYPE=Release -D OPENCV_GENERATE_PKGCONFIG=YES -D CMAKE_INSTALL_PREFIX=/usr/local/opencv4 ..

这里我修改了安装路径为/usr/local/opencv4,可以自己修改到需要的位置,如果该命令中不加-D CMAKE_INSTALL_PREFIX=/usr/local/opencv4来指定安装目录,则默认各部分分别安装在/usr/local/目录的includebinlib3个文件夹下。

注意:
别忘了最后的..。(cmake .是运行cmake,cmake ..会生成Makefile、CMakeFiles等一些文件)
由于opencv4.0以上版本默认不使用pkg-config,因此需要通过-D OPENCV_GENERATE_PKGCONFIG=YES开启生成opencv4.pc文件(后面要用),支持pkg-config功能。如果是安装opencv4.0以下的软件,也加上这句是不会有影响的。
这个命令执行需要一段时间,期间会输出百分比,无需担心。

make编译

1
make -j6

这里-j6表示开6个线程去编译,-j2-j4或者不加其实任意。

make安装

1
sudo make install

以上就完成了安装,下面来配置环境。

配置环境

pkg-config环境

我们可以通过sudo find / -iname opencv4.pc来找到opencv4.pc文件,这里会出现一个Permission denied的报错,但是没关系,路径还是会输出。如果按照之前的方法安装,那么应该是会输出/usr/local/opencv4/lib/pkgconfig/opencv4.pc。因此我们接下来就要把路径/usr/local/opencv4/lib/pkgconfig/加入到PKG_CONFIG_PATH
可以用vim来方便地编辑。编辑方法我在anaconda笔记:解决conda无法下载pytorch的问题一文中已经提过,只需掌握insert模式和normal模式即可正确地操作vim。

1
sudo vim /etc/profile.d/pkgconfig.sh

在文件中加入下面一行:

1
export PKG_CONFIG_PATH=/usr/local/opencv4/lib/pkgconfig:$PKG_CONFIG_PATH

:wq保存退出之后,在终端中使用命令激活。

1
source /etc/profile

最后我们可以通过pkg-config --libs opencv4(opencv2.4使用pkg-config --libs opencv)来验证配置是否成功,如果能输出一系列对应的库,说明配置成功。

动态库环境

为了在程序执行时能加载动态库*.so的路径,我们还需配置动态库环境。

1
sudo vim /etc/ld.so.conf.d/opencv4.conf

在该文件(可能是空文件,也可能是/usr/local/lib),加上或者改成自己lib的安装路径,如果是按照上面的流程安装的,那应该是改成/usr/local/opencv4/lib
最后还要用命令使得配置生效。

1
sudo ldconfig

python-opencv环境

找到编译好的python cv库:

1
sudo find / -iname cv2*.so

这里会看到cv2.cpython-35m-x86_64-linux-gnu.so也就是就是编译好的python3的opencv库,我们把它复制到对应python解释器的/path/to/dist-packages(系统自带的python解释器)和/path/to/site-packages(用户安装的python解释器)目录下,之后就能在该python解释器中使用python-opencv库。
连接到系统自带的python3解释器中:

1
sudo ln -s /usr/local/opencv4/lib/python3.5/dist-packages/cv2/python-3.5/cv2.cpython-35m-x86_64-linux-gnu.so /usr/lib/python3/dist-packages/cv2.so

连接到Anaconda创建的虚拟环境python3解释器中:

1
sudo ln -s /usr/local/opencv4/lib/python3.5/dist-packages/cv2/python-3.5/cv2.cpython-35m-x86_64-linux-gnu.so ~/anaconda3/lib/python3.7/site-packages/cv2.so

这里的ln -s是建立软连接,想进一步了解可以看看ubuntu笔记:安装typora

检验

找到之前解压的源文件,在源文件/samples/cpp/example_cmake目录下(也可能是在源文件/samples/c/example_cmake目录下),我们可以通过官方提供的example来检验。
依次执行:

1
2
3
cmake .
make
./opencv_example

可以看到电脑打开了摄像头拍你自己,在左上角有一个Hello OpenCV,即表示配置成功。


多版本共存

上面已经安装了opencv4.0,下面以opencv2.4为例,介绍一下如何从opencv4.0切换到opencv2.4。
打开~/.bashrc

1
gedit ~/.bashrc

这里用gedit来打开,用vim也一样。
在文件末尾增加如下内容(我将opencv2.4安装在/usr/local/opencv2_4目录下):

1
2
export PKG_CONFIG_PATH=/usr/local/opencv2_4/lib/pkgconfig
export LD_LIBRARY_PATH=/usr/local/opencv2_4/lib

更新~/.bashrc

1
source ~/.bashrc

此时再通过pkg-config --modversion opencv查询opencv的版本,如输出修改后我们想要的版本,则表示切换成功。

注:如果想换回来,用同样的方法把之前加的两条增加的内容注释掉即可,注意别忘了source ~/.bashrc更新!


碰到底线咯 后面没有啦

本文标题:opencv笔记:ubuntu安装opencv以及多版本共存

文章作者:高深远

发布时间:2020年02月26日 - 09:23

最后更新:2020年02月26日 - 11:04

原始链接:https://gsy00517.github.io/opencv20200226092314/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

0%