OPENCV+GPU环境搭建以及测试代码

环境的搭建是看了fengbingchun的博客,写的很详细。http://blog.csdn.net/fengbingchun/article/details/9831837 

这里主要是补充一下一些其他博客中没有的部分。

我的电脑是64位系统,opencv2.4.8,CUDA5.5,cmake2.8.8,VS2012。

首先要在GPU上运行opencv需要下载cmake,版本的话2.8.8以上的版本都可以,之前看有人说是新版本不可以,这个说法是不对的,打开CMakeLists文件可以看到里面有描述写到2.8.8以上版本的cmake都可以支持。这里我用的opencv是2.4.8,反正新版本的cmake对于编译应该不会有影响的。

还有就是由于编译的时间比较久,有些地方可以省略一下加快编译速度。TBB不一定要安装,如果是开始学习可以不用安装,不然配置比较麻烦,过程中出错了会比较头疼。还有就是不用一下把debug和release版本都编译好,先编译完成debug版本,然后就可以开始测试是否编译成功。不同的地方就是添加附加依赖项的时候把release的库删掉。比如opencv_core248d.lib,和opencv_core248.lib ,这两个分别是debug和release版本的库文件,只相差了一个d。

还有一点比较重要的是编译好之后配置好了环境变量要注销一下电脑,不然新的环境变量不能生效。

我之前配置没有成功还怀疑了一下是不是因为我装的64位的CUDA不能编译32位的OPENCV,这个是可以的,而且我还下了一个32位的CUDA发现电脑是装不了的。


最后给一个测试代码,之前有几次编译是对的,因为没有找到合适的测试代码,所以一直怀疑错误,走了不少弯路。一般getCudaEnabledDeviceCount()得到的值不为0就说明成功了。

#include <iostream>
#include "opencv2/opencv.hpp"
#include "opencv2/gpu/gpu.hpp" 
#include "opencv2/gpu/gpumat.hpp"
#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"

using namespace std;
using namespace cv;
using namespace cv::gpu;

int main ()
{   
    const char* imagename = "../debug.png";
    cv::Mat img = cv::imread(imagename);
    if(img.empty())return -1; //是否加载成功
    if(!img.data)return -1;
    cv::imshow("image", img);
    cv::Mat dst;
    TickMeter tm;
    tm.start();
    cv::cvtColor(img,dst,CV_RGB2GRAY);
    tm.stop();
    cout<<"the cpu caculate time is "<<tm.getTimeSec()<<"s"<<endl;
    tm.reset();
    cv::gpu::GpuMat d_src_img(img);
    cv::gpu::GpuMat d_dst_img;
    tm.start();
    cv::gpu::cvtColor(d_src_img,d_dst_img,CV_RGB2GRAY);
    tm.stop();
    d_dst_img.download(dst);
    cv::imshow("test",dst);
    cout<<"the gpu caculate time is "<<tm.getTimeSec()<<"s"<<endl;
    cv::waitKey(0);
    return 0;
}


最后测了一下计算时间,发现GPU计算确实比CPU快一些。不过有个比较严重的问题就是分配GPU内存的时间差不多用了1.4秒,这个有点太慢了吧,不知道有没有人知道怎么解决。其实代码有问题的话最好的办法还是去官网,这里是链接http://docs.opencv.org/modules/gpu/doc/gpu.html 

这个测试代码是看了一篇文章里修改的,当时用那个代码运行一直报错cv::exception 去官网看了下发现是cv::gpu::cvtColor函数的使用不当造成的。GPU的函数和普通的OPENCV函数还是有些不同。

文字组织能力不好,写的比较凌乱,请大家谅解。

你可能感兴趣的:(opencv,GPU)