Ubuntu配置OpenCV及多版本OpenCV共存
本文主要介绍ubuntu下OpenCV的安装,以及如何实现多个OpenCV版本共存。
笔者使用的操作系统为Ubuntu18.04,安装的OpenCV版本有2.4.9、3.2.0、3.4.6、4.2.0。
配置OpenCV
这里以opencv-4.2.0为例,但其他版本也基本适用。
安装OpenCV的依赖包
一步一步安装下面所有的依赖包,如果下面的安装报错,根据报错的具体信息上网查找相关资料即可解决。
sudo apt-get update -y # Update the list of packages
sudo apt-get remove -y x264 libx264-dev # Remove the older version of libx264-dev and x264
sudo apt-get install -y build-essential checkinstall cmake pkg-config yasm
sudo apt-get install -y git gfortran
sudo add-apt-repository -y "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt-get install -y libjpeg8-dev libjasper-dev libpng12-dev
sudo apt-get install -y libtiff5-dev
sudo apt-get install -y libavcodec-dev libavformat-dev libswscale-dev libdc1394-22-dev
sudo apt-get install -y libxine2-dev libv4l-dev
sudo apt-get install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
sudo apt-get install -y qt5-default libgtk2.0-dev libtbb-dev
sudo apt-get install -y libatlas-base-dev
sudo apt-get install -y libfaac-dev libmp3lame-dev libtheora-dev
sudo apt-get install -y libvorbis-dev libxvidcore-dev
sudo apt-get install -y libopencore-amrnb-dev libopencore-amrwb-dev
sudo apt-get install -y x264 v4l-utils
# Some Optional Dependencies
sudo apt-get install -y libprotobuf-dev protobuf-compiler
sudo apt-get install -y libgoogle-glog-dev libgflags-dev
sudo apt-get install -y libgphoto2-dev libeigen3-dev libhdf5-dev doxygen
下载需要的OpenCV版本
所有OpenCV的发布版本都可以在下面这个网址找到,根据自己的需要下载即可。
https://github.com/opencv/opencv/releases
我们需要安装的是opencv-4.2.0以及它的扩展模块opencv_contrib-4.2.0,因此我们可以在下面的网址中下载:
下载解压好之后,会得到两个文件夹,你可以像下面这样存放这两个文件夹:
使用cmake构建库
我们先进入opencv-4.2.0
文件夹,并且创建一个build
文件,之后再进入这个文件夹:
cd opencv-4.2.0
mkdir build
cd build
进入build
文件夹后,你需要输入下面这种格式的cmake指令,需要根据你的实际情况,对下面的指令参数进行修改,不要复制过去就直接运行。
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local/opencv_x.x.x \ #修改为你的opencv版本
-D INSTALL_C_EXAMPLES=ON \
-D CUDA_ARCH_BIN='6.1' \ #修改为你使用的电脑显卡的计算能力
-D WITH_CUDA=ON \
-D WITH_TBB=ON \
-D WITH_V4L=ON \
-D WITH_QT=ON \
-D WITH_OPENGL=ON \
-D OPENCV_EXTRA_MODULES_PATH=/YOU_PATH/opencv_contrib-x.x.x/modules \ #修改为你本机opencv_contrib的路径,不使用opencv_contrib就删掉这行
-D BUILD_EXAMPLES=ON \
-D OPENCV_GENERATE_PKGCONFIG=YES ..
注意事项:
由于OpenCV 4.2.0支持使用CUDA对DNN模块进行加速计算,所以这里配置CUDA;在此之前需要自行配置好NVIDIA显卡的驱动与CUDA。
其中
CUDA_ARCH_BIN='6.1'
指的是显卡的计算能力,可以参考:NVIDA CUDA显卡计算能力对应表
上面这种格式的指令在笔者的电脑上构建opencv-4.2.0、opencv-3.4.6都没有发现问题,应该对于opencv3和opencv4都能够构建成功。
但是在构建opencv2,比如opencv-2.4.9时,建议参考下面的指令进行构建:
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local/opencv_2.4.9 \
-D WITH_CUDA=OFF \
-D WITH_OPENGL=OFF \
-D WITH_OPENCL=OFF \
-D BUILD_JPEG=OFF \
-D BUILD_PNG=OFF \
-D BUILD_JASPER=OFF \
-DBUILD_OPENEXR=OFF \
-D BUILD_TIFF=OFF \
-D BUILD_ZLIB=OFF \
-D WITH_FFMPEG=OFF \
-D CMAKE_CXX_FLAGS="-std=c++11" \
-D CMAKE_CXX_COMPILER=/usr/bin/g++-4.8 \
-D CMAKE_C_COMPILER=/usr/bin/gcc-4.8 \
..
使用make编译库
建议在make之前先查看CPU的核心数:
nproc
你可以根据你的核心数来调整make指令的参数,比如笔者的CPU核心数为12,则可以执行:
make -j12
你也可以不管CPU的核心数,直接运行:
make
但是为了防止编译期间内存占用过多,导致编译失败或者系统卡死,还是建议查看一下CPU的核心数,并且使用部分的核心来进行编译,比如make -j8
。
在编译结束之后,执行:
sudo make install
添加到系统环境变量
修改~/.bashrc
或者~/.zshrc
(用哪个终端就改哪个):
gedit ~/.bashrc
加入如下的内容:
#OpenCV_4.2.0
export PKG_CONFIG_PATH=/usr/local/opencv_4.2.0/lib/pkgconfig
export LD_LIBRARY_PATH=/usr/local/opencv_4.2.0/lib
验证配置结果
任意目录创建一个test.cpp
文件,写入如下内容:
#include "opencv.hpp"
using namespace cv;
using namespace std;
int main( int argc, char** argv )
{
cout << "OpenCV version : " << CV_VERSION << endl;
cout << "Major version : " << CV_MAJOR_VERSION << endl;
cout << "Minor version : " << CV_MINOR_VERSION << endl;
cout << "Subminor version : " << CV_SUBMINOR_VERSION << endl;
}
使用命令行在其文件夹下执行:
# 编译test.cpp程序,并生成可执行文件
g++ -std=c++11 test.cpp `pkg-config --libs --cflags opencv4` -o result
# 执行可执行文件
./result
输出以下内容,即表明配置成功
OpenCV version : 4.2.0
Major version : 4
Minor version : 2
Subminor version : 0
多个OpenCV版本共存
在开发不同工程时可能会需要不同版本的OpenCV,因此在电脑上安装多个版本的OpenCV很有必要。很多人不敢尝试是担心出问题,其实这并不难,成功的关键是安装到不同的路径,并在CMakeList.txt中找到需要的版本。
假设我们已经安装好一版OpenCV,一般都安装在/usr/local
下。如果需要安装另一个版本的OpenCV,就不能再安装到/usr/local
,而是选择其他路径,否则会覆盖掉之前的版本。
安装OpenCV到不同的路径
在上面的安装教程中,我们介绍的其实就是将各个版本的OpenCV安装到不同的路径,你可以继续根据上面的教程来安装其他的OpenCV版本。
添加到系统环境变量
修改~/.bashrc
或者~/.zshrc
(用哪个终端就改哪个):
gedit ~/.bashrc
你应该像下面这样加入新的内容:
#OpenCV_4.2.0
#export PKG_CONFIG_PATH=/usr/local/opencv_4.2.0/lib/pkgconfig
#export LD_LIBRARY_PATH=/usr/local/opencv_4.2.0/lib
#OpenCV_3.4.6
#export PKG_CONFIG_PATH=/usr/local/opencv_3.4.6/lib/pkgconfig
#export LD_LIBRARY_PATH=/usr/local/opencv_3.4.6/lib
#OpenCV_2.4.9
#export PKG_CONFIG_PATH=/usr/local/opencv_2.4.9/lib/pkgconfig
#export LD_LIBRARY_PATH=/usr/local/opencv_2.4.9/lib
新加入OpenCV版本或者暂时不适用的OpenCV版本的建议注释掉。
切换OpenCV的版本
在上面我们把新版本OpenCV添加到系统环境变量时,都加上了注释,因此你可以通过去掉注释来切换OpenCV的版本,比如我们需要使用OpenCV_2.4.9,就可以把上面的内容修改为:
#OpenCV_4.2.0
#export PKG_CONFIG_PATH=/usr/local/opencv_4.2.0/lib/pkgconfig
#export LD_LIBRARY_PATH=/usr/local/opencv_4.2.0/lib
#OpenCV_3.4.6
#export PKG_CONFIG_PATH=/usr/local/opencv_3.4.6/lib/pkgconfig
#export LD_LIBRARY_PATH=/usr/local/opencv_3.4.6/lib
#OpenCV_2.4.9
export PKG_CONFIG_PATH=/usr/local/opencv_2.4.9/lib/pkgconfig
export LD_LIBRARY_PATH=/usr/local/opencv_2.4.9/lib
测试切换的效果
每次切换后,都需要更新~/.bashrc
或者~/.zshrc
source ~/.bashrc
查询OpenCV版本(也可以使用上面安装OpenCV时的测试代码)
pkg-config --modversion opencv
笔者电脑上的切换效果如下所示: