Win10 Install OpenCV4.3.0 With Contrib and CUDA10.2

0.引言

因爲需要用到GPU的一些功能,重新安裝一下opencv並做一個記錄。

OpenCV下載注意分支對應.OpenCV保存路徑:D:\Program Files\opencv430

相關配置:

  • win10x64
  • VS2017
  • NVIDIA:GeForce GTX 1050
  • QT 5.11.1
  • CUDA:cuda_10.2.89_441.22_win10
  • cuDNN:cudnn-10.2-windows10-x64-v7.6.5.32
  • opencv4.3.0 with contrib
  • cmake-3.16

1.Cmake配置OpenCV

就在opencv430根目錄建build文件夾。
在這裏插入圖片描述

D:/Program Files/opencv430/opencv-4.3.0
D:/Program Files/opencv430/build

1.1.不帶contrib的配置(configure)

在這裏插入圖片描述

在這裏插入圖片描述

有幾個文件下載失敗,根據紅色部分的提示打開CMakeDownloadLog.txt裏面有下載改文件的地址,下載後將其改名字然後放到相應的目錄。

後面還有下載失敗的,所以先建個文件夾暫存下載的文件吧。

在這裏插入圖片描述

日誌文件:

#do_copy "opencv_videoio_ffmpeg.dll" "3b094c37d270a30f0b20a0bc8d3ecafb" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/3d2e97081683265950316c65a52c2e8858ffba1b/ffmpeg/opencv_videoio_ffmpeg.dll" "D:/Program Files/opencv430/build/3rdparty/ffmpeg"
#missing "D:/Program Files/opencv430/build/3rdparty/ffmpeg/opencv_videoio_ffmpeg.dll"
#check_md5 "D:/Program Files/opencv430/opencv-4.3.0/.cache/ffmpeg/3b094c37d270a30f0b20a0bc8d3ecafb-opencv_videoio_ffmpeg.dll"
#mismatch_md5 "D:/Program Files/opencv430/opencv-4.3.0/.cache/ffmpeg/3b094c37d270a30f0b20a0bc8d3ecafb-opencv_videoio_ffmpeg.dll" "d41d8cd98f00b204e9800998ecf8427e"
#delete "D:/Program Files/opencv430/opencv-4.3.0/.cache/ffmpeg/3b094c37d270a30f0b20a0bc8d3ecafb-opencv_videoio_ffmpeg.dll"
#cmake_download "D:/Program Files/opencv430/opencv-4.3.0/.cache/ffmpeg/3b094c37d270a30f0b20a0bc8d3ecafb-opencv_videoio_ffmpeg.dll" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/3d2e97081683265950316c65a52c2e8858ffba1b/ffmpeg/opencv_videoio_ffmpeg.dll"
#try 1
# timeout on name lookup is not supported
# getaddrinfo(3) failed for raw.githubusercontent.com:443
# Couldn't resolve host 'raw.githubusercontent.com'
# Closing connection 0
# 

#do_copy "opencv_videoio_ffmpeg_64.dll" "388ee23a7ca44eef2344e265fafd5940" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/3d2e97081683265950316c65a52c2e8858ffba1b/ffmpeg/opencv_videoio_ffmpeg_64.dll" "D:/Program Files/opencv430/build/3rdparty/ffmpeg"
#missing "D:/Program Files/opencv430/build/3rdparty/ffmpeg/opencv_videoio_ffmpeg_64.dll"
#check_md5 "D:/Program Files/opencv430/opencv-4.3.0/.cache/ffmpeg/388ee23a7ca44eef2344e265fafd5940-opencv_videoio_ffmpeg_64.dll"
#mismatch_md5 "D:/Program Files/opencv430/opencv-4.3.0/.cache/ffmpeg/388ee23a7ca44eef2344e265fafd5940-opencv_videoio_ffmpeg_64.dll" "d41d8cd98f00b204e9800998ecf8427e"
#delete "D:/Program Files/opencv430/opencv-4.3.0/.cache/ffmpeg/388ee23a7ca44eef2344e265fafd5940-opencv_videoio_ffmpeg_64.dll"
#cmake_download "D:/Program Files/opencv430/opencv-4.3.0/.cache/ffmpeg/388ee23a7ca44eef2344e265fafd5940-opencv_videoio_ffmpeg_64.dll" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/3d2e97081683265950316c65a52c2e8858ffba1b/ffmpeg/opencv_videoio_ffmpeg_64.dll"
#try 1
# timeout on name lookup is not supported
# getaddrinfo(3) failed for raw.githubusercontent.com:443
# Couldn't resolve host 'raw.githubusercontent.com'
# Closing connection 0
# 

#do_copy "ffmpeg_version.cmake" "ad57c038ba34b868277ccbe6dd0f9602" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/3d2e97081683265950316c65a52c2e8858ffba1b/ffmpeg/ffmpeg_version.cmake" "D:/Program Files/opencv430/build/3rdparty/ffmpeg"
#missing "D:/Program Files/opencv430/build/3rdparty/ffmpeg/ffmpeg_version.cmake"
#check_md5 "D:/Program Files/opencv430/opencv-4.3.0/.cache/ffmpeg/ad57c038ba34b868277ccbe6dd0f9602-ffmpeg_version.cmake"
#mismatch_md5 "D:/Program Files/opencv430/opencv-4.3.0/.cache/ffmpeg/ad57c038ba34b868277ccbe6dd0f9602-ffmpeg_version.cmake" "d41d8cd98f00b204e9800998ecf8427e"
#delete "D:/Program Files/opencv430/opencv-4.3.0/.cache/ffmpeg/ad57c038ba34b868277ccbe6dd0f9602-ffmpeg_version.cmake"
#cmake_download "D:/Program Files/opencv430/opencv-4.3.0/.cache/ffmpeg/ad57c038ba34b868277ccbe6dd0f9602-ffmpeg_version.cmake" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/3d2e97081683265950316c65a52c2e8858ffba1b/ffmpeg/ffmpeg_version.cmake"
#try 1
# timeout on name lookup is not supported
# getaddrinfo(3) failed for raw.githubusercontent.com:443
# Couldn't resolve host 'raw.githubusercontent.com'
# Closing connection 0
# 

根據日誌中網址下載後改名字:

#放置路徑 D:\Program Files\opencv430\opencv-4.3.0\.cache\ippicv
ippicv_2020_win_intel64_20191018_general.zip     ====改爲hash值的名字===>
879741a7946b814455eee6c6ffde2984-ippicv_2020_win_intel64_20191018_general.zip

#以下三個放置路徑 D:\Program Files\opencv430\opencv-4.3.0\.cache\ffmpeg
ffmpeg_version.cmake     ====改爲hash值的名字===>
ad57c038ba34b868277ccbe6dd0f9602-ffmpeg_version.cmake

opencv_videoio_ffmpeg.dll    ====改爲hash值的名字===>
3b094c37d270a30f0b20a0bc8d3ecafb-opencv_videoio_ffmpeg.dll

opencv_videoio_ffmpeg_64.dll    ====改爲hash值的名字===>
388ee23a7ca44eef2344e265fafd5940-opencv_videoio_ffmpeg_64.dll

再次配置就OK了!

1.2.帶contrib的配置(configure)

OPENCV_EXTRA_MODULES_PATH : D:/Program Files/opencv430/opencv_contrib-4.3.0/modules

如果需要用 SURF,SIFT算法的話把OPENCV_ENABLE_NONFREE勾上。BUILD_opencv_world勾上,最後編譯的結果爲兩個,一個debug版本,一個release版本。

在這裏插入圖片描述
configure後依然有文件下載失敗,同樣打開CMakeDownloadLog.txt查看:

#use_cache "D:/Program Files/opencv430/opencv-4.3.0/.cache"
#match_hash_in_cmake_cache "OCV_DOWNLOAD_IPPICV_HASH_3rdparty_ippicv_ippicv_2020_win_intel64_20191018_general_zip"
#match_hash_in_cmake_cache "OCV_DOWNLOAD_ADE_HASH_3rdparty_ade_v0_1_1f_zip"
#match_hash_in_cmake_cache "OCV_DOWNLOAD_FFMPEG_HASH_3rdparty_ffmpeg_opencv_videoio_ffmpeg_dll"
#match_hash_in_cmake_cache "OCV_DOWNLOAD_FFMPEG_HASH_3rdparty_ffmpeg_opencv_videoio_ffmpeg_64_dll"
#match_hash_in_cmake_cache "OCV_DOWNLOAD_FFMPEG_HASH_3rdparty_ffmpeg_ffmpeg_version_cmake"
#do_copy "boostdesc_bgm.i" "0ea90e7a8f3f7876d450e4149c97c74f" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_bgm.i" "D:/Program Files/opencv430/build/downloads/xfeatures2d"
#missing "D:/Program Files/opencv430/build/downloads/xfeatures2d/boostdesc_bgm.i"
#cmake_download "D:/Program Files/opencv430/opencv-4.3.0/.cache/xfeatures2d/boostdesc/0ea90e7a8f3f7876d450e4149c97c74f-boostdesc_bgm.i" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_bgm.i"
#try 1
# timeout on name lookup is not supported
# getaddrinfo(3) failed for raw.githubusercontent.com:443
# Couldn't resolve host 'raw.githubusercontent.com'
# Closing connection 0
# 

#do_copy "boostdesc_bgm_bi.i" "232c966b13651bd0e46a1497b0852191" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_bgm_bi.i" "D:/Program Files/opencv430/build/downloads/xfeatures2d"
#missing "D:/Program Files/opencv430/build/downloads/xfeatures2d/boostdesc_bgm_bi.i"
#cmake_download "D:/Program Files/opencv430/opencv-4.3.0/.cache/xfeatures2d/boostdesc/232c966b13651bd0e46a1497b0852191-boostdesc_bgm_bi.i" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_bgm_bi.i"
#try 1
# timeout on name lookup is not supported
# getaddrinfo(3) failed for raw.githubusercontent.com:443
# Couldn't resolve host 'raw.githubusercontent.com'
# Closing connection 0
# 

#do_copy "boostdesc_bgm_hd.i" "324426a24fa56ad9c5b8e3e0b3e5303e" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_bgm_hd.i" "D:/Program Files/opencv430/build/downloads/xfeatures2d"
#missing "D:/Program Files/opencv430/build/downloads/xfeatures2d/boostdesc_bgm_hd.i"
#cmake_download "D:/Program Files/opencv430/opencv-4.3.0/.cache/xfeatures2d/boostdesc/324426a24fa56ad9c5b8e3e0b3e5303e-boostdesc_bgm_hd.i" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_bgm_hd.i"
#try 1
# timeout on name lookup is not supported
# getaddrinfo(3) failed for raw.githubusercontent.com:443
# Couldn't resolve host 'raw.githubusercontent.com'
# Closing connection 0
# 

#do_copy "boostdesc_binboost_064.i" "202e1b3e9fec871b04da31f7f016679f" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_binboost_064.i" "D:/Program Files/opencv430/build/downloads/xfeatures2d"
#missing "D:/Program Files/opencv430/build/downloads/xfeatures2d/boostdesc_binboost_064.i"
#cmake_download "D:/Program Files/opencv430/opencv-4.3.0/.cache/xfeatures2d/boostdesc/202e1b3e9fec871b04da31f7f016679f-boostdesc_binboost_064.i" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_binboost_064.i"
#try 1
# timeout on name lookup is not supported
# getaddrinfo(3) failed for raw.githubusercontent.com:443
# Couldn't resolve host 'raw.githubusercontent.com'
# Closing connection 0
# 

#do_copy "boostdesc_binboost_128.i" "98ea99d399965c03d555cef3ea502a0b" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_binboost_128.i" "D:/Program Files/opencv430/build/downloads/xfeatures2d"
#missing "D:/Program Files/opencv430/build/downloads/xfeatures2d/boostdesc_binboost_128.i"
#cmake_download "D:/Program Files/opencv430/opencv-4.3.0/.cache/xfeatures2d/boostdesc/98ea99d399965c03d555cef3ea502a0b-boostdesc_binboost_128.i" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_binboost_128.i"
#try 1
# timeout on name lookup is not supported
# getaddrinfo(3) failed for raw.githubusercontent.com:443
# Couldn't resolve host 'raw.githubusercontent.com'
# Closing connection 0
# 

#do_copy "boostdesc_binboost_256.i" "e6dcfa9f647779eb1ce446a8d759b6ea" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_binboost_256.i" "D:/Program Files/opencv430/build/downloads/xfeatures2d"
#missing "D:/Program Files/opencv430/build/downloads/xfeatures2d/boostdesc_binboost_256.i"
#cmake_download "D:/Program Files/opencv430/opencv-4.3.0/.cache/xfeatures2d/boostdesc/e6dcfa9f647779eb1ce446a8d759b6ea-boostdesc_binboost_256.i" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_binboost_256.i"
#try 1
# timeout on name lookup is not supported
# getaddrinfo(3) failed for raw.githubusercontent.com:443
# Couldn't resolve host 'raw.githubusercontent.com'
# Closing connection 0
# 

#do_copy "boostdesc_lbgm.i" "0ae0675534aa318d9668f2a179c2a052" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_lbgm.i" "D:/Program Files/opencv430/build/downloads/xfeatures2d"
#missing "D:/Program Files/opencv430/build/downloads/xfeatures2d/boostdesc_lbgm.i"
#cmake_download "D:/Program Files/opencv430/opencv-4.3.0/.cache/xfeatures2d/boostdesc/0ae0675534aa318d9668f2a179c2a052-boostdesc_lbgm.i" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_lbgm.i"
#try 1
# timeout on name lookup is not supported
# getaddrinfo(3) failed for raw.githubusercontent.com:443
# Couldn't resolve host 'raw.githubusercontent.com'
# Closing connection 0
# 

#do_copy "vgg_generated_48.i" "e8d0dcd54d1bcfdc29203d011a797179" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/fccf7cd6a4b12079f73bbfb21745f9babcd4eb1d/vgg_generated_48.i" "D:/Program Files/opencv430/build/downloads/xfeatures2d"
#missing "D:/Program Files/opencv430/build/downloads/xfeatures2d/vgg_generated_48.i"
#cmake_download "D:/Program Files/opencv430/opencv-4.3.0/.cache/xfeatures2d/vgg/e8d0dcd54d1bcfdc29203d011a797179-vgg_generated_48.i" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/fccf7cd6a4b12079f73bbfb21745f9babcd4eb1d/vgg_generated_48.i"
#try 1
# timeout on name lookup is not supported
# getaddrinfo(3) failed for raw.githubusercontent.com:443
# Couldn't resolve host 'raw.githubusercontent.com'
# Closing connection 0
# 

#do_copy "vgg_generated_64.i" "7126a5d9a8884ebca5aea5d63d677225" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/fccf7cd6a4b12079f73bbfb21745f9babcd4eb1d/vgg_generated_64.i" "D:/Program Files/opencv430/build/downloads/xfeatures2d"
#missing "D:/Program Files/opencv430/build/downloads/xfeatures2d/vgg_generated_64.i"
#cmake_download "D:/Program Files/opencv430/opencv-4.3.0/.cache/xfeatures2d/vgg/7126a5d9a8884ebca5aea5d63d677225-vgg_generated_64.i" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/fccf7cd6a4b12079f73bbfb21745f9babcd4eb1d/vgg_generated_64.i"
#try 1
# timeout on name lookup is not supported
# getaddrinfo(3) failed for raw.githubusercontent.com:443
# Couldn't resolve host 'raw.githubusercontent.com'
# Closing connection 0
# 

#do_copy "vgg_generated_80.i" "7cd47228edec52b6d82f46511af325c5" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/fccf7cd6a4b12079f73bbfb21745f9babcd4eb1d/vgg_generated_80.i" "D:/Program Files/opencv430/build/downloads/xfeatures2d"
#missing "D:/Program Files/opencv430/build/downloads/xfeatures2d/vgg_generated_80.i"
#cmake_download "D:/Program Files/opencv430/opencv-4.3.0/.cache/xfeatures2d/vgg/7cd47228edec52b6d82f46511af325c5-vgg_generated_80.i" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/fccf7cd6a4b12079f73bbfb21745f9babcd4eb1d/vgg_generated_80.i"
#try 1
# timeout on name lookup is not supported
# getaddrinfo(3) failed for raw.githubusercontent.com:443
# Couldn't resolve host 'raw.githubusercontent.com'
# Closing connection 0
# 

#do_copy "vgg_generated_120.i" "151805e03568c9f490a5e3a872777b75" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/fccf7cd6a4b12079f73bbfb21745f9babcd4eb1d/vgg_generated_120.i" "D:/Program Files/opencv430/build/downloads/xfeatures2d"
#missing "D:/Program Files/opencv430/build/downloads/xfeatures2d/vgg_generated_120.i"
#cmake_download "D:/Program Files/opencv430/opencv-4.3.0/.cache/xfeatures2d/vgg/151805e03568c9f490a5e3a872777b75-vgg_generated_120.i" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/fccf7cd6a4b12079f73bbfb21745f9babcd4eb1d/vgg_generated_120.i"
#try 1
# timeout on name lookup is not supported
# getaddrinfo(3) failed for raw.githubusercontent.com:443
# Couldn't resolve host 'raw.githubusercontent.com'
# Closing connection 0
# 

#do_copy "face_landmark_model.dat" "7505c44ca4eb54b4ab1e4777cb96ac05" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/8afa57abc8229d611c4937165d20e2a2d9fc5a12/face_landmark_model.dat" "D:/Program Files/opencv430/build/testdata/cv/face/"
#missing "D:/Program Files/opencv430/build/testdata/cv/face//face_landmark_model.dat"
#cmake_download "D:/Program Files/opencv430/opencv-4.3.0/.cache/data/7505c44ca4eb54b4ab1e4777cb96ac05-face_landmark_model.dat" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/8afa57abc8229d611c4937165d20e2a2d9fc5a12/face_landmark_model.dat"
#try 1
# timeout on name lookup is not supported
# getaddrinfo(3) failed for raw.githubusercontent.com:443
# Couldn't resolve host 'raw.githubusercontent.com'
# Closing connection 0
# 

這裏網址輸入後是txt,右鍵另存爲會自動顯示保存的名稱。
在這裏插入圖片描述

根據日誌文件提示分別放入

#文件夾需要自己根據路徑建
D:\Program Files\opencv430\build\downloads\xfeatures2d
D:\Program Files\opencv430\build\testdata\cv\face

再次configure,就OK了。

我感覺上一步也可以這樣,不用改名字,放在missing路徑下就OK

configure成功後,Generate生成vs工程文件。 之後直接Open Project,則會使用前面選擇的vs版本打開工程。
在這裏插入圖片描述

2.Visual Studio編譯OpenCV

在菜單欄上選擇:生成 ->批生成。可同時編譯debug版本和release版本。
編譯完後,把build/install文件夾放到opencv430文件夾下就OK。

在這裏插入圖片描述

在這裏插入圖片描述

在這裏插入圖片描述
在這裏插入圖片描述

3.配置環境

這個就是平時遇到的操作了。

環境變量配置:此電腦右鍵屬性–>高級系統設置–>環境變量–>系統變量–>Path–>新建

D:\Program Files\opencv430\install\x64\vc15\bin

3.1.debug x64

打開VS新建一個工程,新建屬性表opencv430x64d.props

  • include目錄:在通用屬性–>VC++目錄–>包含目錄中添加
D:\Program Files\opencv430\install\include
D:\Program Files\opencv430\install\include\opencv2
  • lib目錄:通用屬性–>VC++目錄–>庫目錄中添加
D:\Program Files\opencv430\install\x64\vc15\lib
  • 庫文件:通用屬性–>鏈接器–>輸入–>附加的依賴項中添加
opencv_img_hash430d.lib
opencv_world430d.lib

3.2.release x64

新建屬性表opencv430x64r.props

  • include目錄:在通用屬性–>VC++目錄–>包含目錄中添加
D:\Program Files\opencv430\install\include
D:\Program Files\opencv430\install\include\opencv2
  • lib目錄:通用屬性–>VC++目錄–>庫目錄中添加
D:\Program Files\opencv430\install\x64\vc15\lib
  • 庫文件:通用屬性–>鏈接器–>輸入–>附加的依賴項中添加
opencv_img_hash430.lib
opencv_world430.lib

然後將屬性表拷貝到安裝目錄,以便後續查找。

在這裏插入圖片描述
最後,註銷一下電腦,進行測試,不需要重啓。

3.3.Test

#include <iostream>
#include <vector>
#include <opencv2/xfeatures2d.hpp>
#include <opencv2/xfeatures2d/nonfree.hpp>
#include <opencv2/highgui.hpp>
 
using namespace cv;
using namespace std;
 
int main()
 
{
	Mat src = imread("F:/vs_test/lena.jpg");
 
	if (src.data == NULL)
	{
		cout << "No exist" << endl;
		return -1;
	}
	namedWindow("input image", WINDOW_AUTOSIZE);
	namedWindow("output image", WINDOW_AUTOSIZE);
	imshow("input image", src);
	Ptr<Feature2D> sift = xfeatures2d::SIFT::create(400); //括號參數越大越精確,自定
	vector <KeyPoint> keypointsa;
	Mat a;
 
	sift->detectAndCompute(src, noArray(), keypointsa, a); //得到特徵點和特徵點描述
	drawKeypoints(src, keypointsa, src);//畫出特徵點
 
	//顯示
	imshow("output image", src);
 
	waitKey();
	return 0;
}

在這裏插入圖片描述

4.opencv430 with contrib and CUDA10.2

4.1.Cmake與VS編譯

  • 爲什麼帶CUDA與不帶CUDA版本要分開編譯?

不帶CUDA版本的opencv方便拷貝到其他電腦使用,同時拷貝install文件夾和屬性表,按照安裝目錄放置就OK,只需要配置一個環境變量就可以直接使用了,很方便。但是帶CUDA的版本就不一樣了,需要CUDA版本相同,稍微麻煩一點,同時爲了降低出錯率,選擇分開編譯。

將上面編譯好的文件夾opencv430複製一份,並改名爲opencv430withCUDA。將build文件夾裏面的testdatadownloads保留,其他的刪除,將opencv-4.3.0\.cacha\ffmpegippicv保留,其他的刪除,保留的就是上面自己下載的文件。

打開CMake,點擊File-->Delete Cache重新輸入路徑。

D:/Program Files/opencv430withCUDA/opencv-4.3.0
D:/Program Files/opencv430withCUDA/build

D:/Program Files/opencv430withCUDA/opencv_contrib-4.3.0/modules

需要勾選的選項有:

BUILD_opencv_world 
OPENCV_ENABLE_NONFREE
WITH_CUDA
MKL_WITH_OPENMP  #這是一個並行加速庫,可以不選,只是我需要用
OPENCV_DNN_CUDA
WITH_TBB    #默認情況下是OFF、勾選可以獲得並行處理支持
CUDA_ARCH_BIN  6.1 #刪除其他的數字,這個6.1是顯卡計算力,根據自己的顯卡填寫,就是這裏十分耗時

按照上面的流程走一遍,下載失敗的文件都已經下載了,只要CUDA安裝沒出錯就比較快 ,帶CUDA 的編譯好慢!!流程上沒什麼大問題,就是VS編譯很慢。

configure完成後,Open Project打開工程:生成–>批生成。把install文件夾拷貝出來。

4.2.環境配置

環境變量配置:此電腦右鍵屬性–>高級系統設置–>環境變量–>系統變量–>Path–>新建

D:\Program Files\opencv430withCUDA\install\x64\vc15\bin

註銷一下電腦,或者全部配置完後再註銷。

4.2.1.debug x64

打開VS新建一個工程,新建屬性表opencv430x64d.props

  • include目錄:在通用屬性–>VC++目錄–>包含目錄中添加
D:\Program Files\opencv430WithCUDA\install\include
D:\Program Files\opencv430withCUDA\install\include\opencv2
  • lib目錄:通用屬性–>VC++目錄–>庫目錄中添加
D:\Program Files\opencv430withCUDA\install\x64\vc15\lib

如果前面沒有勾選BUILD_opencv_world,庫文件會比較多,此時庫文件的名稱可以使用命令行獲取,區別於Linux的命令行,Windows的腳本可以使用後綴名爲**.bat的文件:
在這裏插入圖片描述

cd  D:\Program Files\opencv430withCUDA\install\x64\vc15\lib
dir /b *430d.lib  >DebugLibName.txt && move  "DebugLibName.txt"  "D:\Program Files\opencv430withCUDA\DebugLibName.txt"
dir /b *430.lib  >ReleaseLibName.txt && move  "ReleaseLibName.txt"  "D:\Program Files\opencv430withCUDA\ReleaseLibName.txt"

雙擊運行後在D:\Program Files\opencv430withCUDA\中打開txt文檔複製就好。
在這裏插入圖片描述

在這裏插入圖片描述

在這裏插入圖片描述

  • 庫文件:通用屬性–>鏈接器–>輸入–>附加的依賴項中添加
opencv_img_hash430d.lib
opencv_world430d.lib

4.2.2.release x64

新建屬性表opencv430x64r.props

  • include目錄:在通用屬性–>VC++目錄–>包含目錄中添加
D:\Program Files\opencv430WithCUDA\install\include
D:\Program Files\opencv430withCUDA\install\include\opencv2
  • lib目錄:通用屬性–>VC++目錄–>庫目錄中添加
D:\Program Files\opencv430withCUDA\install\x64\vc15\lib
  • 庫文件:通用屬性–>鏈接器–>輸入–>附加的依賴項中添加
opencv_img_hash430.lib
opencv_world430.lib

最後將屬性表拷貝到安裝目錄,以便後續查找。
在這裏插入圖片描述
安裝好後可以刪除opencv430opencv430withCUDA下的build文件夾。很大。註銷一下電腦,進行測試,不需要重啓。

4.3.Test

#include <iostream>
 
#include "opencv2/opencv_modules.hpp"
#include "opencv2/core.hpp"
#include "opencv2/features2d.hpp"
#include "opencv2/highgui.hpp"
#include "opencv2/cudafeatures2d.hpp"
#include "opencv2/xfeatures2d/cuda.hpp"
 
using namespace std;
using namespace cv;
using namespace cv::cuda;
 
 
int main()
{
	GpuMat img1, img2;
	img1.upload(imread("1.bmp", IMREAD_GRAYSCALE));
	img2.upload(imread("2.bmp", IMREAD_GRAYSCALE));
 
	cv::cuda::printShortCudaDeviceInfo(cv::cuda::getDevice());
 
	SURF_CUDA surf;
 
	// detecting keypoints & computing descriptors
	GpuMat keypoints1GPU, keypoints2GPU;
	GpuMat descriptors1GPU, descriptors2GPU;
	surf(img1, GpuMat(), keypoints1GPU, descriptors1GPU);
	surf(img2, GpuMat(), keypoints2GPU, descriptors2GPU);
 
	cout << "FOUND " << keypoints1GPU.cols << " keypoints on first image" << endl;
	cout << "FOUND " << keypoints2GPU.cols << " keypoints on second image" << endl;
 
	// matching descriptors
	Ptr<cv::cuda::DescriptorMatcher> matcher = cv::cuda::DescriptorMatcher::createBFMatcher(surf.defaultNorm());
	vector<DMatch> matches;
	matcher->match(descriptors1GPU, descriptors2GPU, matches);
 
	// downloading results
	vector<KeyPoint> keypoints1, keypoints2;
	vector<float> descriptors1, descriptors2;
	surf.downloadKeypoints(keypoints1GPU, keypoints1);
	surf.downloadKeypoints(keypoints2GPU, keypoints2);
	surf.downloadDescriptors(descriptors1GPU, descriptors1);
	surf.downloadDescriptors(descriptors2GPU, descriptors2);
 
	// drawing the results
	Mat img_matches;
	drawMatches(Mat(img1), keypoints1, Mat(img2), keypoints2, matches, img_matches);
 
	namedWindow("matches", 0);
	imshow("matches", img_matches);
	waitKey(0);
 
	return 0;
}

安裝完測試時報錯,無法定位程序輸入點於動態庫上:

在這裏插入圖片描述
很顯然庫沒找到!在路徑D:\Program Files\opencv430withCUDA\install\x64\vc15下有兩個文件夾,一個bin,一個lib,從前面的配置可以看到,bin文件路徑是添加到環境變量的,lib路徑是添加到屬性表裏面的。其中bin裏面是動態庫dll和可執行文件exelib裏面就是靜態庫。所以,如果是lib庫沒找到,那就是庫目錄,和庫名稱的問題;如果是動態庫dll文件沒找到,那就是環境變量的問題。但是環境變量已經設置了,那就真像只有一個,環境變量的順序問題!!因爲前面已經添加了不帶CUDA版本的環境變量,這次添加的環境變量在其之後,故找錯了庫所以報錯。

順便查了一下可執行文件在運行時尋找和調用dll文件的路徑搜索順序。一般是:

  • A 可執行文件所在目錄;
  • B 進程當前目錄;
  • C 系統目錄,%SystemRoot%/system32
  • D 16位系統目錄;,%SystemRoot%/system
  • E Windows目錄,%SystemRoot%/
  • F 環境變量PATH中的目錄;

移動順序後,成功運行:
在這裏插入圖片描述

在這裏插入圖片描述

編譯多個版本可能就會存在動態庫查找順序的問題,自己得清楚版本之間的差別在哪兒,遇到報錯能反應過來。enjoy.

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