最近在做计算机视觉项目时需要获取视频的光流图,于是便在github找了一些现成的项目工程,这些项目工程都是使用C++ OpenCV,所以需要在电脑上安装OpenCV,折腾了很久,也踩了很多坑,这里把安装过程及工程运行过程记录下来,方便以后查阅。
Linux gcc环境
这个是最基本的,编译需要有gcc编译环境,没有的输入一行命令即可解决。
sudo apt install build-essential
安装CMake
CMake需要着重说明一下,Ubuntu 16.04自带的CMake版本一般不会超过3.5,而且通过apt-get命令下载的版本也往往不是最新版本,或者达不到项目工程CMake版本的需要,尤其是低版本的CMake在搜索依赖包的时候会出现一些问题,所以最好的办法就是下载源码包进行编译。
在编译CMake前首先编译OpenSSL,下载源码后开始编译
./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl shared
make -j4
make install
然后添加环境变量,在.bashrc中添加
export PATH=$PATH:/usr/local/openssl/bin
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/openssl/lib
export OPENSSL_ROOT_DIR=/usr/local/openssl
在 etc/ld.so.conf 中添加
/usr/local/openssl
安装完openssl后去cmake官网下载最细版本的cmake源码,解压后开始编译。
./bootstrap
make
sudo make install
安装OpenCV
先通过apt下载OpenCV所需要的依赖库,包括pkg-config,ffmpeg等。
sudo apt-get install git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
有可能会遇到libjasper-dev无法正常下载的情况,可是尝试下面的方法。
sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt update
sudo apt install libjasper1 libjasper-dev
完成后从OpenCV官网下载相应版本的源码包,进入文件夹,创建build文件夹。
cd ~/opencv
mkdir build
cd build
然后执行CMake命令
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local/opencv ..
这个最简单的CMake配置命令,还可以在命令中添加许多编译选项,比如
-DWITH_TBB=ON
-DWITH_V4L=ON
-DWITH_CUDA=ON
-DBUILD_EXAMPLES=ON
-DENABLE_PRECOMPILED_HEADERS=ON/OFF
-DWITH_QT=ON
-DWITH_OPENGL=ON
-DOPENCV_GENERATE_PKGCONFIG=ON
-DENABLE_CXX11=ON
....
添加cuda时要注意,Opencv2.4版本只支持cuda9.0,所以当你的cuda版本较高时,需要安装Opencv3.0以上版本才行。
如果需要编译opencv_contrib模块,则需要添加opencv_contrib文件夹下的module目录
-DOPENCV_EXTRA_MODULES_PATH=<path to opencv_contrib/modules/>
生成Makefile文件后,执行make
make -j4
sudo make install
然后在/etc/ld.so.conf中添加lib路径即可
编译光流法项目工程
这里推荐两个github上的光流法工程
https://github.com/agethen/dense-flow https://github.com/bityangke/denseflow
其中有一个需要安装boost,在cmake执行时可能会遇见find_package(opencv REQUIRED)的问题,即cmake无法找到Opencv的cmake配置文件,这种情况一般是cmake版本低造成的,可以升级cmake,或者修改一下CMakeLists.txt文件
find_package(opencv REQUIRED)
修改为
find_package(OpenCV REQUIRED
NO_MODULE
PATHS /usr/local/opencv #你的Opencv的路径
NO_DEFAULT_PATH)
或者在cmake编译选项中添加-DCMAKE_INSTALL_PREFIX=<你的Opencv的路径>。 编译完成后即可运行程序
另外如果电脑上安装了Anaconda,记得在编译Opencv时一定要屏蔽Anaconda环境,否则会造成编译环境污染,导致无法编译成功。