由於現在人工智慧相當的火紅,使得GPU的相關應用也變得非常的多,而且透過GPU行處理的優勢,可以使得運算速率大幅提升,而官網上下載的OpenCV版本只有支援CPU因此要將下載下來的OpenCV再透過CMake進行函示庫的製作,如此一來,即可順利使用GPU版本的OpenCV

此處需先安裝NVIDIACUDA程式。

可以參考下面連結中CUDA安裝的部分

http://cvfiasd.pixnet.net/blog/post/175023846-windows%E5%AE%89%E8%A3%9Dtensorflow%E6%95%99%E5%AD%B8


此範例選擇下載OpenCV的版本為2.4.13.6 (如下圖所示)。

OpenCV網站: https://opencv.org/releases.html

解壓縮下載的OpenCV檔案

要製作出GPU版本的OpenCV函式庫需先下載CMake(此範例的Cmake版本為3.8版)。

Cmake下載網站 : https://cmake.org/files/

安裝完CMake後,打開即會看到下圖,並找尋剛剛下載OpenCV的路徑以及要創立GPU版本的路徑(以下方路徑為例)

Where is the source code : D:/opencv/sources

Where to build the binaryies : D:/opencv-GPU

 

按下左下的Configure並按下確定,就會看到下圖的畫面。

此處要選擇Visual Studio版本以及位元

(此範例選擇 : Visual Studio 2015 Win64)

勾選 : WITH_CUBLAS、WITH_CUDA、WITH_OPENGL

取消勾選 : BUILD_DOCS

(可以參考下圖進行勾選)

按上圖選擇後,按圖中Configure即可得到下圖。

再按圖中的Generate

並找到剛剛創建GPU版本的資料夾位置,打開OpenCV專案。

(此範例路徑:D:\opencv-GPU)

點選ALL_BUILD右鍵 -> 建置 (需要等上一段時間)

完成後再對INSTALL點右鍵 -> 建置

接下來要進行OpenCV路徑設定,並進行GPU讀取測試。

點選專案右鍵 -> VC++目錄 -> Include目錄 -> 加入以下路徑

(需依照GPU版本的資料夾位置進行調整)

D:\opencv-cuda\install\include

D:\opencv-cuda\install\include\opencv2

D:\opencv-cuda\install\include\opencv

VC++目錄 -> 程式庫目錄 -> 加入以下路徑

(需依照GPU版本的資料夾位置進行調整)

D:\opencv-cuda\install\x64\vc14\lib

C/C++ -> 輸入 -> 加入以下名稱

opencv_calib3d2413d.lib

opencv_contrib2413d.lib

opencv_core2413d.lib

opencv_features2d2413d.lib

opencv_flann2413d.lib

opencv_gpu2413d.lib

opencv_highgui2413d.lib

opencv_imgproc2413d.lib

opencv_legacy2413d.lib

opencv_ml2413d.lib

opencv_nonfree2413d.lib

opencv_objdetect2413d.lib

opencv_ocl2413d.lib

opencv_photo2413d.lib

opencv_stitching2413d.lib

opencv_superres2413d.lib

opencv_ts2413d.lib

opencv_video2413d.lib

opencv_videostab2413d.lib

到此階段OpenCVGPU版本函示庫路徑已經設定完成,接下來測試此專案是否能找到GPU,若可以則代表路徑設定成功,則能夠使用OpenCVGPU版本進行開發。


測試程式碼

#include <stdio.h>
#include "opencv2/opencv.hpp"
#include "opencv2/gpu/gpu.hpp"

using namespace cv;

int main()
{
    Mat img = imread("
test_0978_aligned.jpg", -1); 
//修改成自己圖片路徑

    if (cv::gpu::getCudaEnabledDeviceCount() == 0)
        printf("NO CUDA\n");
    else
        printf("CUDA = %d\n", cv::gpu::getCudaEnabledDeviceCount());

    namedWindow("video demo", CV_WINDOW_AUTOSIZE);
    imshow("video demo", img);
    cvWaitKey(0);

    return 0;
}


若編譯執行後顯示CUDA=1且能正常使用OpenCV顯示圖片,則代表已經可以成功使用OpenCVGPU版本。

#如有問題歡迎留言討論

arrow
arrow
    文章標籤
    OpenCV GPU CUDA
    全站熱搜

    水面上的小草 發表在 痞客邦 留言(2) 人氣()