记录一下自己之前在安装opencv过程中出现的一些问题。
环境:Linux Ubuntu16.04+CUDA9.0
下面是opencv安装的一些依赖。虽然根据自己装的过程发现其中有几条并非必要的,不过全装上肯定没什么大的问题。1
sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy
sudo apt-get install libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev #一些图像处理包的依赖
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev liblapacke-dev
sudo apt-get install libxvidcore-dev libx264-dev #视频处理的依赖
sudo apt-get install libatlas-base-dev gfortran #atlas的lib,应该是优化用的
sudo apt-get install ffmpeg
官网的下载链接,可以根据自己的需要选择版本:
https://www.opencv.org/releases.html
虽然本人一直是右键Extract Here搞定的,不过还是记一下:
unzip opencv-3.*.*.zip
这就意味着在前面配依赖的时候还要加一个:
sudo apt-get install unzip
不过这个可能是Ubuntu自带的吧??(并没注意过)
然后就是进入解压后的文件夹,进行下面的操作
cd opencv-3.*.*.zip
mkdir build
cd build
cmake ..
上述的是完全按照默认配置安装,在我自己的电脑上安装opencv3.4.2直接按照默认配置恰好没什么问题。下面给出cmake过程中的比较详细的编译属性配置1。
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \ #指定路径
-D INSTALL_PYTHON_EXAMPLES=ON \ #是否安装python的Examples
-D INSTALL_C_EXAMPLES=OFF \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.2.0/modules \
-D PYTHON_EXCUTABLE=/usr/bin/python \
-D WITH_CUDA=ON \ # 使用CUDA,如果不是非常需要GPU或者没有CUDA,关掉这个就可以解决CUDA_nppi_LIBRARY的问题。
-D WITH_CUBLAS=ON \ #和上面保持一致就好
-D DCUDA_NVCC_FLAGS="-D_FORCE_INLINES" \
-D CUDA_ARCH_BIN="5.3" \ # 指定Compute Capability算力,对应的算力值需要根据自己的显卡型号到官网上查询:(https://developer.nvidia.com/cuda-gpus)
-D CUDA_ARCH_PTX="" \
-D CUDA_FAST_MATH=ON \ # 计算速度更快但是相对不精确
-D WITH_TBB=ON \
-D WITH_V4L=ON \
-D WITH_QT=ON \ # 如果qt未安装可以删去此行;若因为未正确安装qt导致的Qt5Gui报错,可将build内文件全部删除后重新cmake,具体可以参考[这里](http://stackoverflow.com/questions/17420739/opencv-2-4-5-and-qt5-error-s)
-D WITH_GTK=ON \
-D WITH_OPENGL=ON \
-D CUDA_GENERATION=Kepler \ #这里是指定CUDA版本,opencv3.2默认支持CUDA8.0,改成9.0就好了
-D BUILD_EXAMPLES=ON ..
根据上述详细配置来进行编译,可以避免包括上述问题在内的很多问题,一般来说不关键的缺省就可以了。
接下来就是编译和安装
make -j8 #-j8指多核编译,根据电脑配置选择数字,不加的话可能会比较慢吧
sudo make install
经过漫长的等待,就安装好了。
cmake的时候会卡在这里,根据经验即便等上一两个小时可能也不会动的。那么就不要等了,把他要的文件手动下载下来就好了。下面这个网址是不需要花费什么币的,虽然有时候速度也很感人:https://github.com/opencv/opencv_3rdparty 。可以在Branch里面找到对应的版本,在ippicv文件夹里下载对应的tgz文件就可以啦。
对于opencv3.2,该tgz会放在 ~/opencv-3.2.0/3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e 里面,我们要做的就是把手动下载下来的tgz放在这个目录下。
而opencv3.3和3.4这些版本就没这么友好了,这事我们只需要Ctrl+F 搜索并打开 ippicv.cmake 将第47行的
改为tgz包的下载根目录,如: ”/home/xxxx/download/" 就可以了。
出现这一问题是因为OPENCV3.2还未支持CUDA9.0,同样的问题在OPENCV2编译时也会出现。有效的解决方案请见:
https://blog.csdn.net/u014613745/article/details/78310916
问题出在CMake的命令里,如果缺省或直接采用默认架构即Fermi就会出现上述问题,这也是因为版本不匹配。根据上面CMake的详细介绍,更改当前CUDA版本:
-D CUDA_GENERATION=Kepler
或者直接指定算力
-D CUDA_ARCH_BIN="5.3"
应该都可以解决这一问题。
虽然我在应用的过程中好像并没需要这一步,不过为了避免将来会出现一些奇怪的错误,我还是把这步写到这里。2
配置路径
sudo gedit /etc/ld.so.conf.d/opencv.conf
#打开文件opencv.conf,可能是个空文件在文件中添加路径:
/usr/local/lib #添加到文件里的,不是代码
更新系统库
sudo ldconfig
添加外部变量
sudo gedit /etc/bash.bashrc
#在末尾添加:
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
激活配置然后更新database
source /etc/bash.bashrc
sudo updatedb
萌新第一次发文。如果有什么错误之处,万望大家前来指正。另外参考了一些其他大佬的文章,如果有侵权之处还请联系我删除。
https://www.cnblogs.com/arkenstone/p/6490017.html ↩︎ ↩︎
https://blog.csdn.net/u013066730/article/details/79411767 ↩︎