OpenCV 官网:http://opencv.org/releases.html
选择 3.1.0 版本的 source,下载 opencv-3.1.0.zip
解压到自己指定的目录下,命令行进入解压的文件夹 opencv-3.1.0
目录下,执行:
mkdir build # 创建编译的文件目录
cd build
cmake -D WITH_OPENMP=ON -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
cmake -DENABLE_PRECOMPILED_HEADERS=OFF -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D CUDA_GENERATION=Kepler ..
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_TIFF=ON -D BUILD_EXAMPLES=ON -D CUDA_GENERATION=Auto -D BUILD_NEW_PYTHON_SUPPORT=ON -DENABLE_PRECOMPILED_HEADERS=OFF..
make -j8 #编译
-j8
表示并行计算(用 8 条线程进行 make,速度比较快),根据自己电脑的配置进行设置,配置比较低的电脑可以将数字改小或不使用,直接输 make。
第三行 cmake 出现错误:
CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
CUDA_nppi_LIBRARY (ADVANCED)
-- Configuring incomplete, errors occurred!
See also "/data/zyy/usr/local/opencv-3.1.0/build/CMakeFiles/CMakeOutput.log".
See also "/data/zyy/usr/local/opencv-3.1.0/build/CMakeFiles/CMakeError.log".
经过百度原因是 cuda 和 opencv 版本的兼容问题,做出以下修改:
1)找到 opencv-3.1.0/cmake
文件夹下的 FindCUDA.cmake
文件
- 找到行
find_cuda_helper_libs(nppi)
,修改为:
find_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_nppi_LIBRARY};${CUDA_npps_LIBRARY}")
修改为:
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}")
- 找到行
unset(CUDA_nppi_LIBRARY CACHE)
修改为:
unset(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)
2)找到文件 OpenCVDetectCUDA.cmake
修改如下几行:
...
set(__cuda_arch_ptx "")
if(CUDA_GENERATION STREQUAL "Fermi")
set(__cuda_arch_bin "2.0")
elseif(CUDA_GENERATION STREQUAL "Kepler")
set(__cuda_arch_bin "3.0 3.5 3.7")
...
修改为:
...
set(__cuda_arch_ptx "")
if(CUDA_GENERATION STREQUAL "Kepler")
set(__cuda_arch_bin "3.0 3.5 3.7")
elseif(CUDA_GENERATION STREQUAL "Maxwell")
set(__cuda_arch_bin "5.0 5.2")
...
3)CUDA9 的 /include
文件夹里有一个 cuda_fp16.h
头文件,将其添加至 OpenCV 的 /modules/cudev/include/opencv2/cudevcommon.hpp
文件里:
增加一行 # include <cuda_fp16.h>
即可。
然后重新生成即可:
第四行 make 出现错误:
再往报错的地方上面找,看到:
nvcc fatal : Unsupported gpu architecture 'compute_31
在文件夹 /data/zyy/usr/local/opencv-3.1.0/build/modules/core/CMakeFiles/cuda_compile.dir/src/cuda/
里找到 cuda_compile_generated_gpu_mat.cu.o.cmake
修改:
将 -gencode arch=compute_31,code=sm_31
删掉就行了/