由於現在人工智慧相當的火紅,使得GPU的相關應用也變得非常的多,而且透過GPU平行處理的優勢,可以使得運算速率大幅提升,而官網上下載的OpenCV版本只有支援CPU,因此要將下載下來的OpenCV再透過CMake進行函示庫的製作,如此一來,即可順利使用GPU版本的OpenCV。
此處需先安裝NVIDIA的CUDA程式。
可以參考下面連結中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
到此階段OpenCV的GPU版本函示庫路徑已經設定完成,接下來測試此專案是否能找到GPU,若可以則代表路徑設定成功,則能夠使用OpenCV的GPU版本進行開發。
測試程式碼
#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顯示圖片,則代表已經可以成功使用OpenCV的GPU版本。
#如有問題歡迎留言討論
留言列表