win10下cmake3.15.0+opencv4.1.0+vs2017+cuda10

下載:

vs2017社區版:https://visualstudio.microsoft.com/zh-hans/vs/older-downloads/
opencv4.1.0:https://opencv.org/releases/
opencv_contrib4.1.0:https://github.com/opencv/opencv_contrib/releases
cmake:https://cmake.org/download/

一、opencv安裝

1.解壓opencv,並將opencv_contrib解壓在建立的build文件中。

2.添加環境變量:
D:\opencv4.1.0\build\bin
D:\opencv4.1.0\build\x64\vc15\bin

3.將opencv裏面的相關文件複製到C盤

將bin目錄中的opencv_world410.dll和opencv_world410d.dll文件複製到C:\Windows\SysWOW64.

將bin目錄裏面的opencv_ffmpeg410_64.dll複製到C:\Windows\System32.

二、VS2017

1.安裝選擇需要的工作負載:使用C++的桌面開發、Visual Studio擴展開發、Python.

2.建立空項目,選擇 視圖-其他窗口-屬性管理器,對Debug|X64下的Microsoft.Cpp.x64.user的屬性編輯。

在VC++包含目錄編輯添加:
D:\opencv4.1.0\build\include
D:\opencv4.1.0\build\include\opencv2

VC++包含目錄編輯添加:
D:\opencv4.1.0\build\x64\vc15\lib

在鏈接器-輸入-附加依賴項編輯添加:
opencv_world410d.lib
注:一些教程中也會添加opencv_world410.lib,但這樣後面會出錯,只添加帶b的即可。

Release|X64中的配置同上。

測試代碼:

#include <iostream>  
#include <opencv2/core/core.hpp>  
#include <opencv2/highgui/highgui.hpp>  
 
using namespace cv;
 
int main()
{
	// 讀入一張圖片(poyanghu縮小圖)    
	Mat img = imread("F:\\suoxiaotu\\poyanghu縮小圖.tif");
	// 創建一個名爲 "圖片"窗口    
	namedWindow("圖片");
	// 在窗口中顯示圖片   
	imshow("圖片", img);
	// 等待6000 ms後窗口自動關閉    
	waitKey(6000);
	return 0;
}

三、Cmake

1.安裝Install option選擇Add Cmake to the sysyem PATH for all users.

添加環境變量D:\cmake\bin

2.cmd 輸入nvcc -V驗證。

3.打開CMake Gui
分別找路徑:
D:\opencv4.1.0\sources
D:\opencv4.1.0\build

4.configure,然後選擇VS2017 , platform默認win32,如果是64位,一定要更改!!!不然會出錯。

再勾選4個:
BUILD_EXAMPLES
BUILD_opencv_world
OPENCV_EXTRA_MODULES_PATH:D:\opencv4.1.0\opencv_contrib\modules
WITH CUDA (以及OpenGL)

再次configure,由於使用的是CUDA10,編譯錯誤:
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_cublas_LIBRARY (ADVANCED)

參考該博客解決

解決方案:
(1)在opencv安裝位置找到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)將頭文件cuda_fp16.h(C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\include)添加到opencv\modules\cudev\include\opencv2\cudev\common.hpp
即在common.hpp中添加

#include <cuda_fp16.h>

configure done後生成,成功後open project

在VS2017中,點擊 生成-批生成
勾選INSTALL和ALL_BUILD,生成。

結束後在build/install中有:
在這裏插入圖片描述

未完…

參考:
VS2017配置opencv教程(超詳細!!!)
Windows10+VS2017+cmake 編譯opencv4.1 + opencv_contrib(含cuda)
opencv+CUDA9.1+vs2015環境搭建,編譯opencv庫,調用GPU加速運算
OpenCV3.3+CUDA9.0+Cmake3.9 環境搭建
windows10+vs2017+opencv3.4.1配置YOLOV4
YOLOv4 的各種新實現、配置、測試、訓練資源彙總

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章