Ubuntu配置OpenCV及多版本OpenCV共存


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,因此我们可以在下面的网址中下载:

OpenCV 4.2.0

OpenCV Contib 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

笔者电脑上的切换效果如下所示:


文章作者: Immortalqx
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Immortalqx !
评论
  目录