本機安裝環境:
筆記本:系統 windows10家庭中文版;顯卡:NVIDIA GeForce 930 MX; VS 版本:2013 ;Opencv 版本:3.4.2;
安裝vs2013:
本機已安裝,不贅述;
安裝 cuda9.1:
step 1:打開Nvidia 控制面板,查看顯卡支持的cuda版本:
點擊系統信息--組件:本機爲9.1.126,支持cuda9.1;
step 2:去cuda官網下載對應版本的安裝程序,例本機如下選擇:
官網:https://developer.nvidia.com/cuda-toolkit-archive
選擇網絡版進行下載安裝:
step 3:點擊下載的.exe進行安裝:
安裝路徑默認就可以,然後選擇自定義安裝,只安裝cuda:
點下一步,安裝完成;
step 4:配置環境變量:
安裝結束後,打開屬性--高級系統設置--環境變量,能夠看到系統變量中多了CUDA_PATH和CUDA_PATH_V9_1兩個變量,然後在系統變量中添加以下變量:
CUDA_SDK_PATH = C:\ProgramData\NVIDIA Corporation\CUDA Samples\v9.0
CUDA_LIB_PATH = %CUDA_PATH%\lib\x64
CUDA_BIN_PATH = %CUDA_PATH%\bin
CUDA_SDK_BIN_PATH = %CUDA_SDK_PATH%\bin\win64
CUDA_SDK_LIB_PATH = %CUDA_SDK_PATH%\common\lib\x64
step 5:查看是否安裝成功:
打開cmd,輸入:nvcc -V;得到以下結果:
編譯opencv3.4.2:
step 1:在opencv 的github項目主頁上下載opencv的源碼,以及對應的contribt 庫,項目地址:https://github.com/opencv
step 2 : 下載CMake,最好爲CMake-gui版,操作界面比較簡單,添加source和build的路徑;
step 3:打開with cuda 選項,點擊configure,configure down後可以看到以下信息:
step 4:點擊generate,出現generate down 後,關閉Cmake;
step 5:進入build路徑下,用VS2013打開OpenCv工程項目,點擊生成--重新生成解決方案,等待編譯完成後,
右擊CMakeTargets下的INSTALL選擇僅用於項目選擇僅生成:
完成後在build路徑install\x64\v12\lib路徑下會生成以下庫***d.lib爲debug下生成的,***.lib爲release下生成的:
step 6 :添加環境變量:
在系統的環境變量中加入:build路徑下bin的路徑:
例:
E:\software\opencv342gpu\build\install\x64\vc12\bin
測試gpu:
新建一個vs2013工程,編寫測試代碼,驗證測試結果;
例,本次實現用gpu和cpu分別實現圖像的灰度轉化:
step 1:配置工程屬性:
包含目錄中加入頭文件路徑:
庫目錄:
鏈接器--輸入--附加依賴項,加入install生成的庫文件lib:
opencv_aruco342d.lib
opencv_bgsegm342d.lib
opencv_bioinspired342d.lib
opencv_calib3d342d.lib
opencv_ccalib342d.lib
opencv_core342d.lib
opencv_cudaarithm342d.lib
opencv_cudabgsegm342d.lib
opencv_cudacodec342d.lib
opencv_cudafeatures2d342d.lib
opencv_cudafilters342d.lib
opencv_cudaimgproc342d.lib
opencv_cudalegacy342d.lib
opencv_cudaobjdetect342d.lib
opencv_cudaoptflow342d.lib
opencv_cudastereo342d.lib
opencv_cudawarping342d.lib
opencv_cudev342d.lib
opencv_datasets342d.lib
opencv_dnn_objdetect342d.lib
opencv_dnn342d.lib
opencv_dpm342d.lib
opencv_face342d.lib
opencv_features2d342d.lib
opencv_flann342d.lib
opencv_fuzzy342d.lib
opencv_hdf342d.lib
opencv_hfs342d.lib
opencv_highgui342d.lib
opencv_img_hash342d.lib
opencv_imgcodecs342d.lib
opencv_imgproc342d.lib
opencv_line_descriptor342d.lib
opencv_ml342d.lib
opencv_objdetect342d.lib
opencv_optflow342d.lib
opencv_phase_unwrapping342d.lib
opencv_photo342d.lib
opencv_plot342d.lib
opencv_reg342d.lib
opencv_rgbd342d.lib
opencv_saliency342d.lib
opencv_shape342d.lib
opencv_stereo342d.lib
opencv_stitching342d.lib
opencv_structured_light342d.lib
opencv_superres342d.lib
opencv_surface_matching342d.lib
opencv_text342d.lib
opencv_tracking342d.lib
opencv_video342d.lib
opencv_videoio342d.lib
opencv_videostab342d.lib
opencv_xfeatures2d342d.lib
opencv_ximgproc342d.lib
opencv_xobjdetect342d.lib
opencv_xphoto342d.lib
step 2 測試:
#include <iostream>
#include "opencv2/opencv.hpp"
#include <opencv2/core/cuda.hpp>
#include <opencv2/cudaarithm.hpp>
#include <opencv2/cudafilters.hpp>
#include <opencv2/cudaimgproc.hpp>
#include <opencv2/imgproc.hpp>
using namespace std;
using namespace cv;
void test_cv_api(){
int num_devices = cuda::getCudaEnabledDeviceCount();
if (num_devices <= 0)
{
cerr << "There is no device" << endl;
throw - 1;
}
int enable_device_id = -1;
for (int i = 0; i < num_devices; i++)
{
cuda::DeviceInfo dev_info(i);
if (dev_info.isCompatible())
{
enable_device_id = i;
}
}
if (enable_device_id < 0)
{
cerr << "GPU module isn't built for GPU" << endl;
throw - 1;
}
cuda::setDevice(enable_device_id);
Mat src_img = imread("go.jpg");
Mat dst_image_cpu;
Mat dst_image_gpu;
//cpu:
cv::cvtColor(src_img, dst_image_cpu, CV_BGR2GRAY);
//gpu:
cuda::GpuMat d_src_img;
d_src_img.upload(src_img);
cuda::GpuMat d_dst_img;
cuda::cvtColor(d_src_img, d_dst_img, CV_BGR2GRAY);
d_dst_img.download(dst_image_gpu);
//test_out
imshow("cpu_gray", dst_image_cpu);
waitKey(100);
imshow("gpu_gray", dst_image_gpu);
waitKey(100);
system("Pause");
}
int main(){
cout << "initialize gpu envoriment" << endl;
test_cv_api();
}
結果:
至此安裝、編譯、測試完成。
參考文章:
【CUDA】CUDA9.0+VS2017+win10詳細配置:https://blog.csdn.net/u013165921/article/details/77891913
OPENCV2.4.9+CUDA6.5+VS2013 64位系統環境搭建:https://blog.csdn.net/xuhang0910/article/details/45601035