win10使用vs2019從原始碼編譯OpenCV4.5+cuda10.2+cudnn8.0的C++環境和Python環境

Keras深度學習發表於2020-11-25

1 環境準備

1 vs2019
2 anaconda+Python3.6+numpy
3 cuda和cudnn環境
4 cmake
5 OpenCV4.5.0以及OpenCV-contrib4.5.0壓縮包
本人電腦裡的cuda和cudnn環境如下:
在這裡插入圖片描述
當然Python環境可以不用anaconda,自己去下載Python3.6安裝,然後裝上numpy模組,因為Python版本的OpenCV依賴於numpy。如果使用者僅僅需要編譯C++版本的OpenCV,可以去掉Python環境。

2 cmake編譯

將下載的OpenCV兩個壓縮包解壓

在這裡插入圖片描述
進入OpenCV4.5.0目錄下,新建一個資料夾build,作為cmake編譯檔案存放目錄。
開啟cmake,目錄選擇如下:
在這裡插入圖片描述
然後點選configure
在這裡插入圖片描述
點選完成
等待configure完成,在這個介面中進行如下更改:
將build_java勾選取消、build_tests勾選取消、with vtk勾選取消
勾選上這個OPENCV_ENABLE_NONFREE
在這裡插入圖片描述
勾選BUILD_opencv_world
在這裡插入圖片描述

在這裡插入圖片描述

然後新增contrib的目錄:

在這裡插入圖片描述
以上幾個選項就是C++編譯環境的設定,如果使用者不需要編譯Python版本,就可以到這一步。
接下來設定Python版本OpenCV的生成
對於cmake介面中有些選項如果沒有的話,需要手動新增Add Entry
新建BUILD_opencv_python3以及BUILD_opencv_python2
一個為true一個為false
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
然後根據自己的anaconda中Python和numpy的路徑來進行如下配置:
在這裡插入圖片描述

python.exe所在路徑:
PYTHON3_EXECUTABLE=G:/install/conda/envs/python368/python.exe
標頭檔案目錄:
PYTHON3_INCLUDE_DIR=G:/install/conda/envs/python368/include
Python的lib檔案路徑:
PYTHON3_LIBRARY=G:/install/conda/envs/python368/libs/python36.lib
numpy模組中標頭檔案目錄:
PYTHON3_NUMPY_INCLUDE_DIRS=G:/install/conda/envs/python368/Lib/site-packages/numpy/core/include
Python第三方模組所在目錄:
PYTHON3_PACKAGES_PATH=G:/install/conda/envs/python368/Lib/site-packages

到這一步Python的環境就配置好了,接下來配置GPU環境:
勾選上WITH_CUDA
在這裡插入圖片描述
由於沒有WITH_CUDNN,因此就手動新增

在這裡插入圖片描述

然後點選configure
這一次configure 完成後
在這裡插入圖片描述

上面還有一些紅色選項需要我們再次確認,因此接著再點選一次configure
這一次完成後所有選項全部變白了
在這裡插入圖片描述
然後我們點選生成generate
等待生成完成

vs2019編譯

在點選generate生成完成後,我們使用vs2019開啟這個工程
由於本人需要的是release版本的,因此將debug改為release

在這裡插入圖片描述
開啟了工程後我們先不要急於生成,先單獨執行這兩個工程看看是否會成功

在這裡插入圖片描述
在我的電腦裡執行時提示這個錯誤:unsupported Microsoft Visual Studio version!
在這裡插入圖片描述
這個是cuda的標頭檔案不支援vs2019這麼高的版本,我們開啟提示錯誤的這個host_config.h檔案,找到這個地方
在這裡插入圖片描述
因為1920對應的就是vs2017,vs2019的數字大於這個,所有就報錯,解決辦法是把這個1920改大些,這裡我改成2000
在這裡插入圖片描述
接下來可以右鍵ALL_BUILD->生成

在這裡插入圖片描述
生成成功然後就可以右鍵Install 生成動態庫和標頭檔案
至此GPU版本的OpenCV編譯完成。
那麼這個Python版本的OpenCV是否已經安裝了,實際上在點選install進行生成的時候,就已經把Python版本的OpenCV模組安裝到Python環境中去了。
在這裡插入圖片描述
不過通過這種方式安裝的Python版OpenCV通過pip list卻無法顯示出來,因為這個命令只能顯示通過pip安裝的模組,但是卻是可以使用的。
在這裡插入圖片描述
OpenCV4.5的C++GPU庫編譯好了,接下來在vs2019中呼叫測試下看GPU庫是否可以使用:
C++測試程式碼如下:

#include <iostream>
#include<opencv2/opencv.hpp>

int main(int argc, char* argv[])
{
    cv::cuda::GpuMat img(400, 600, CV_8UC3, cv::Scalar(255, 0, 0));
    cv::Mat cpuImg;
    img.download(cpuImg);
    cv::imshow("test", cpuImg);
    cv::waitKey(0);
    return 0;
}

執行成功,代表OpenCV環境編譯正確。
在這裡插入圖片描述

相關文章