事先装有 OpenCV 需要重新安装的,先执行卸载步骤,再安装。
卸载步骤
1.找到当初安装 OpenCV 的 release 或 build 目录,执行以下命令1
2
3
4sudo make uninstall
cd ..
sudo rm -r build
sudo rm -r /usr/local/include/opencv2 /usr/local/include/opencv /usr/include/opencv /usr/include/opencv2 /usr/local/share/opencv /usr/local/share/OpenCV /usr/share/opencv /usr/share/OpenCV /usr/local/bin/opencv* /usr/local/lib/libopencv*
2.删除 usr 文件夹中所有 opencv 相关项1
2cd /usr/
find . -name "*opencv*" | xargs sudo rm -rf
3.移除 Python 相关1
apt-get remove opencv-doc opencv-data python-opencv
安装步骤
1.通过命令安装各种软件包1
2
3$ 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 libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
2.进到安装路径下拷贝 OpenCV 源码1
$ git clone https://github.com/opencv/opencv.git
3.选择安装的 OpenCV 版本号1
2$ cd opencv
$ git checkout -b 2.4 origin/2.4
4.使用 Cmake 编译 OpenCV 源码1
2
3$ mkdir release
$ cd release
$ cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
5.make 安装 OpenCV1
2$ make -j4
$ sudo make install
安装到此结束。
测试
命令进入 Python 编辑器1
2import cv2
print(cv2.__version__)
会输出 OpenCV 的版本号。
cuda 9.0 与 opencv 版本匹配问题:
Cmake 过程中会出现以下问题:
错误
1 | CMake Error: The following variables are used in this project, but they are set to NOTFOUND. |
原因
在cuda9里面,NVIDIA把 libnppi.so
换成libnppc.so
libnppial.so
libnppicc.so
libnppicom.so
libnppidei.so
libnppif.so
libnppig.so
libnppim.so
libnppist.so
libnppisu.so
libnppitc.so
libnpps.so
解决方案
修改opencv/cmake/FindCUDA.cmake 文件,将其中的1
unset(CUDA_nppi_LIBRARY CACHE)
替换为:1
2
3
4
5
6
7
8
9
10unset(CUDA_nppial_LIBRARY CACHE)
unset(CUDA_nppicc_LIBRARY CACHE)
unset(CUDA_nppicom_LIBRARY CACHE)
unset(CUDA_nppidei_LIBRARY CACHE)
unset(CUDA_nppif_LIBRARY CACHE)
unset(CUDA_nppig_LIBRARY CACHE)
unset(CUDA_nppim_LIBRARY CACHE)
unset(CUDA_nppist_LIBRARY CACHE)
unset(CUDA_nppisu_LIBRARY CACHE)
unset(CUDA_nppitc_LIBRARY CACHE)
将1
2find_cuda_helper_libs(nppi)
set(CUDA_npp_LIBRARY"${CUDA_nppc_LIBRARY};${CUDA_nppi_LIBRARY};${CUDA_npps_LIBRARY}")
替换为1
2
3
4
5
6
7
8
9
10
11find_cuda_helper_libs(nppial)
find_cuda_helper_libs(nppicc)
find_cuda_helper_libs(nppicom)
find_cuda_helper_libs(nppidei)
find_cuda_helper_libs(nppif)
find_cuda_helper_libs(nppig)
find_cuda_helper_libs(nppim)
find_cuda_helper_libs(nppist)
find_cuda_helper_libs(nppisu)
find_cuda_helper_libs(nppitc)
set(CUDA_npp_LIBRARY "${CUDA_nppc_LIBRARY};${CUDA_nppial_LIBRARY};${CUDA_nppicc_LIBRARY};${CUDA_nppicom_LIBRARY};${CUDA_nppidei_LIBRARY};${CUDA_nppif_LIBRARY};${CUDA_nppig_LIBRARY};${CUDA_nppim_LIBRARY};${CUDA_nppist_LIBRARY};${CUDA_nppisu_LIBRARY};${CUDA_nppitc_LIBRARY};${CUDA_npps_LIBRARY}")
错误
1 | opencv nvcc fatal : Unsupported gpu architecture 'compute_20' |
原因
cuda9不支持‘ compute-20 ’
解决方案:
更改 OpenCVDetectCUDA.cmake 文件,把有关 ‘ compute-20 ’ 的全删掉
将1
2
3
4
5
6
7if(CUDA_GENERATION STREQUAL "Fermi")
set(__cuda_arch_bin "3.0 3.5")
elseif(CUDA_GENERATION STREQUAL "Kepler")
if(${CUDA_VERSION} VERSION_LESS "5.0")
set(__cuda_arch_bin "2.0 2.1")
else()
set(__cuda_arch_bin "3.0 3.5")
替换为1
2
3
4
5
6
7if(CUDA_GENERATION STREQUAL "Fermi")
set(__cuda_arch_bin "3.0 3.5")
elseif(CUDA_GENERATION STREQUAL "Kepler")
if(${CUDA_VERSION} VERSION_LESS "5.0")
set(__cuda_arch_bin "3.0")
else()
set(__cuda_arch_bin "3.0 3.5")
将:1
2
3
4if(${CUDA_VERSION} VERSION_LESS "5.0")
set(__cuda_arch_bin "1.1 1.2 1.3 2.0 2.1(2.0) 3.0")
elseif(${CUDA_VERSION} VERSION_GREATER "6.5")
set(__cuda_arch_bin "2.0 2.1(2.0) 3.0 3.5")
替换为:1
2
3
4if(${CUDA_VERSION} VERSION_LESS "5.0")
set(__cuda_arch_bin "1.1 1.2 1.3 2.0 2.1(2.0) 3.0")
elseif(${CUDA_VERSION} VERSION_GREATER "6.5")
set(__cuda_arch_bin "3.0 3.5")
然后 cmake 成功。
参考
https://docs.opencv.org/2.4/doc/tutorials/introduction/linux_install/linux_install.html
https://stackoverflow.com/questions/46584000/cmake-error-variables-are-set-to-notfound