Win10+OpenCV2.4.13+VS2013+CUDA7.5配置教程

首先说明一下,OpenCV2.3.13之前的版本不支持CUDA7.5,因此配置总是会出问题,在OpenCV官网下载OpenCV2.4.13版本,此版本支持CUDA7.5。

另外OpenCV2.4.13是支持VS2013的,但不清楚支不支持VS2015及以上,OpenCV官网上还有OpenCV2.4.13.2版本支持VS2015,我并没有测试,慎用。

下面开始教程:

 

1.    下载TBB,解压。

解压完成之后在【我的电脑】-【属性】-【高级系统设施】-【高级】-【环境变量】-用户变量-Path】中添加两个路径:

      %TBB路径%\bin\intel64\vc12(选择vc12还是vc14要看你装的VS版本,VS2013对应vc12)

      %TBB路径%\include

之后在【我的电脑】-【属性】-【高级系统设施】-【高级】-【环境变量】-【系统变量】-Path】中添加一个路径:%TBB路径%\bin\intel64\vc12

 

2.    下载CUDA7.5并安装,安装完成后,理论上应该自动设置好了环境变量,可以自己去查看

3.    下载CMake3.8.1并安装,最新版本的CMake有问题,OpenCV2.4.13不兼容,安装时注意勾选一个类似叫add to system path 的选项。

4.    打开CMake这样选择

点击【Configure】之后会进入版本选择界面:

                       

 

第一个框选择对应的VS版本,注意选Win64版本,然后finish,等。

然后是这个界面

 

在WITH里勾上WITH_CUBLAS、WITH_OPENGL 、WITH_TBB.

在CUDA里这样选,勾上CUDA_FAST_MATH。

(这里可能对于高级显卡配置时要做相应更改,如果要改就把第二个红框里选上架构,具体架构要在NVIDA官网查,还要查Compute Capability并将其填到第一个红框里,我在官网查的自己GPU运算能力有5.0,按照网上的做法在第一个框内填写为3.0 3.5 5.0,第二个红框选的Kepler,能成功配置出来但不能跑代码(提示Invalid device symbol错误);若第二个框选的Fermi,第一个框内填写为2.0 2.1(2.0),跑代码也会出错。所以最后自己选择不做更改,让CMake自己决定,编译出来是成功跑出代码了的。)

再次点击configure,出现如下界面

 

再次Configure,完成后再点Generate,完成后再点open project。

5.    等待加载完成,打开VS的视图-其他窗口-属性管理器(Properties Manager),

展开ALL_BUILD,双击Microsoft.Cpp.x64.user,

                                                                     

通用属性-VC++中,将可执行目录、包含目录、库目录里的自己添加的路径都删除,保留默认路径,像这样

                       

 

然后选择Debug模式,x64,默认是Win32,可以在那个框中下拉有一个配置管理器里设置,不会的自己百度:)

 

然后右键CMake Target下的INSTALL,选择第一项,生成。大约一个半小时后,生成成功以后如果没有报错,切换到Release模式,再次在INSTALL下生成。再过一个半小时,配置完成。

下一步需要将配置好的项目目录里的库的位置加入到【我的电脑】-【属性】-【高级系统设施】-【高级】-【环境变量】-【系统变量】-Path中,比如我的是:

E:\ProgramData\CV_build II\install\x64\vc12\bin,将其加入到环境变量中保存。

新建一个NVIDA项目,再次切换到属性管理器,和之前一样,Debug x64模式下:双击Microsoft.Cpp.x64.user,配置【VC++目录】—【包含目录】: 

(这里的E:\ProgramData\CV_build II为你用CMake生成的工程存放的目录)

C:\Program Files\NVIDIA GPU ComputingToolkit\CUDA\v7.5\include

E:\ProgramData\CV_build II\install\include\opencv

E:\ProgramData\CV_build II\install\include\opencv2

E:\ProgramData\CV_build II\install\include

%TBB路径%\include

 

【VC++目录】—【库目录】:     

C:\Program Files\NVIDIA GPU ComputingToolkit\CUDA\v7.5\lib\Win32

C:\Program Files\NVIDIA GPU ComputingToolkit\CUDA\v7.5\lib\x64

E:\ProgramData\CV_buildII\install\x64\vc12\lib

% TBB路径%\lib

 

【链接器】—【附加依赖项】: 包含CUDA和OpenCV的所有依赖项

cudart.lib

opencv_imgproc2413d.lib

opencv_calib3d2413d.lib

opencv_contrib2413d.lib

opencv_core2413d.lib

opencv_features2d2413d.lib

opencv_flann2413d.lib

opencv_gpu2413d.lib

opencv_highgui2413d.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

 

Release模式也可以配置,前面步骤一样,最后链接器配置为除了第一个lib外其他lib末尾去掉d字母,如opencv_videostab2413.lib。(但是这两个不能一起配置的,不然会报错。只用配置Debug版就够了。如果有人实在需要Release版,可以给我留言我再改教程。网上一些人写的分别在Debug|x64和Release|x64编辑Microsoft.Cpp.x64.user的方法我试的是都不行,浪费了我好长时间。。。

 

至此,配置完成了。

//测试程序(此为在随便网上找的)
#include "cuda_runtime.h"    
#include "device_launch_parameters.h"    
#include <cuda.h>    
#include <cuda_device_runtime_api.h>    
#include <opencv2\gpu\gpu.hpp>    
#include <opencv2\gpu\gpumat.hpp>    
#include <opencv2\opencv.hpp>    
#include <opencv.hpp>    
#include <stdio.h>    
#include <iostream>    
#include <memory>  
#include "opencv2/gpu/device/common.hpp"    
#include "opencv2/gpu/device/reduce.hpp"    
#include "opencv2/gpu/device/functional.hpp"    
#include "opencv2/gpu/device/warp_shuffle.hpp"    
using namespace std;  
using namespace cv;  
using namespace gpu; 
template <int nthreads>  
__global__ void compute_kernel(int height, int width, const PtrStepb img, PtrStepb dst)  
{  
    const int x = blockIdx.x * blockDim.x + threadIdx.x;  //x方向检索  
    const int y = blockIdx.y * blockDim.y + threadIdx.y;  //y方向检索  
    const uchar* src_y = (const uchar*)(img + y*img.step);  //原图像  
    uchar* dst_y = (uchar*)(dst + y*dst.step);  
  
    if (x < width && y < height)  
    {  
        dst_y[3 * x] = 255 - src_y[3 * x];        //3通道彩色图像处理  
        dst_y[3 * x + 1] = 255 - src_y[3 * x + 1];  
        dst_y[3 * x + 2] = 255 - src_y[3 * x + 2];  
    }  
}
int main()  
{  
    Mat a = imread("PeaShooter.jpg");  //把测试图片放在和自己建的工程的cpp文件同目录下,或者设置为绝对路径
    GpuMat d_a(a);                 //GPUMat  
    GpuMat d_dst(d_a.size(), CV_8UC3);  
    int width = a.size().width;     //横向,x方向  
    int height = a.size().height;   //纵向,y方向  
  
    const int nthreads = 256;  
    dim3 bdim(nthreads, 1);  
    dim3 gdim(divUp(width, bdim.x), divUp(height, bdim.y));  
  
  
    compute_kernel<nthreads> <<<gdim, bdim >>>(height, width, d_a, d_dst);  
    Mat dst(d_dst);  
    imshow("原始图像", a);  
    imshow("反向图像", dst);  
    waitKey();  
    return 0;  
}

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值