很久之前在windows7 32位上配置过GPU版的opencv,可参考http://blog.csdn.net/fengbingchun/article/details/9831837
Windows7 64位CUDA7.5的配置可以参考:http://blog.csdn.net/fengbingchun/article/details/53892997这里是在CUDA7.5已正确安装后的操作步骤:
1. 从https://github.com/opencv/opencv/releases下载opencv-2.4.13.exe,并解压缩;
2. 打开cmake-gui:如图
(1)、勾选:CUDA_FAST_MATH、WITH_CUBLAS、WITH_CUDA、WITH_CUFFT、WITH_NVCUVID
(2)、指定CUDA正确路径:CUDA_TOOLKIT_ROOT_DIR:C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v7.5;CUDA_GENERATION: Auto
(3)、如果想缩短编译的时间:可以去掉BUILD_EXAMPLES的勾选;对CUDA_ARCH_BIN的值进行设置,默认会有2.0 /2.1(2.0)/3.0/3.5,只设置其中一个;
(4)、依次点击Configure和Generate按钮,会在D:\soft\OpenCV2.4.13\vs2013_cuda_dll目录下生成OpenCV.sln工程,如下图:
3. 打开OpenCV.sln工程:
(1)、分别在Release和Debug下,选中工程解决方案’OpenCV’,点击重新生成解决方案;
(2)、在编译过程中会弹出对话框(检测到文件修改),如下图,点击全部重新加载;
(3)、编译完后,依次点击CMakeTargets,INSTALL,生成
(4)、将D:\soft\OpenCV2.4.13\vs2013_cuda_dll\install\x64\vc12\bin添加到系统环境变量中,重启系统;
4. 新建一个控制台工程,验证GPU版OpenCV库的正确性,测试代码如下:
#include <iostream>
#include <string>
#include <opencv2/opencv.hpp>
#include <opencv2/gpu/gpu.hpp>
int main()
{
int device_num = cv::gpu::getCudaEnabledDeviceCount();
fprintf(stdout, "device count: %d\n", device_num);
std::string image_name = "D:/soft/OpenCV2.4.13/opencv/sources/doc/tutorials/introduction/clojure_dev_intro/images/lena.png";
cv::Mat mat = cv::imread(image_name, 1);
if (!mat.data) {
fprintf(stderr, "read image fail\n");
return -1;
}
cv::gpu::GpuMat src(mat);
int width = src.cols;
int height = src.rows;
int channels = src.channels();
fprintf(stdout, "image width: %d, height: %d, channels: %d\n", width, height, channels);
cv::gpu::GpuMat dst;
cv::gpu::resize(src, dst, cv::Size(300, 400), 0.0, 0.0, 1);
cv::Mat mat2(dst);
cv::imwrite("resize.jpg", mat2);
return 0;
}
执行结果如下,一切正常:
另:在windows10上编译OpenCV2.4.13+CUDA8.0的步骤与上面操作步骤相似,只需修改的是:
(1)、为了加快编译速度,去掉BUILD_DOCS、BUILD_EXAMPLES、BUILD_PERF_TESTS、BUILD_TESTS、BUILD_opencv_world的勾选;
(2)、windows10,显卡为NVIDIA GeForce 940MX的设备对于opencv2.4.13不支持2.1,因此此时需要在CUDA_ARCH_BIN中去掉2.0和2.1,并且CUDA_GENERATION不能选择为Auto,而是默认什么都不选,操作结果分别如下图: