opencv的GPU加速的重编译过程

此文档记录opencv的GPU加速的准备工作的操作流程。本电脑的软硬件配置如下:win7的64位系统、opencv2.4.9、cuda6.5、vs2013、cmake3.80、显卡GT1050。转自本人的新浪博客。

准备阶段:

安装vs跟opencv就不说了。安装cuda6.5:

先用鲁大师之类的软件看看是什么显卡,然后在网上看看你的显卡是否支持cuda(https://developer.nvidia.com/cuda-gpus),其实一般的英伟达显卡都支持的了。再去下载cuda安装包(https://developer.nvidia.com/cuda-toolkit-archive),至于下载那个版本,这个不好说,我安装过9.0的,安装的时候没警告提示,安装好之后进行后面的操作时就没法正常操作,但我安装6.5的,安装时有警告,但后面的操作正常,最后就用了6.5的。当然了,版本越高就功能越完善。安装cuda时,一开始时可能有个叹号的警告的,这个不用管,直接下一步,后面有一个选择安装方式的(大概意思是选择推荐安装或者自定义安装),这里选择自定义,全部勾上就行,其他的方面,就一直按照默认来点下一步(包括路径)。

 

opencv的GPU加速的重编译过程_第1张图片

安装cmake:

直接百度找找就有了,可以安装在d盘,至于版本,我试过3.4和3.8,都行。

         下载tbb:

         百度云盘下载(http://pan.1hqeUYMC 密码:u4es),解压放在d盘的一个你记得的位置。

配置阶段:

解压tbb,并将其bin目录添加到环境变量中。添加环境变量之后记得要重启电脑。例如目录:D:tfilestbb41_20130613oss\bin\intel64\vc12,每个人电脑的目录都不同。

剩下的步骤按这个来http://blog.csdn.net/xuhang0910/article/details/45601035

注意:减少首次运行时间长问题:http://blog.sina.com.cn/s/blog_b1e24f1d0102wsdr.html

这一步在Generate 前加入显卡加速能力值,可以用CUDA_Z软件来检测出你的显卡计算能力值是多少

测试:

可以把测试代码换成这个,用来比较有没有GPU加速的用时:

#include 
//#include 
//#include 
#include 
#include 

int main()
{
   cv::gpu::GpuMata(10, 10, CV_8U);
   int64 begintime, endtime;
   int num_devices = cv::gpu::getCudaEnabledDeviceCount();
   if (num_devices <=0)
   {
      std::cerr << "There is no devoce" << std::endl;
      system("pause");
      return -1;
   }
   int enable_device_id = -1;
   for (int i = 0; i < num_devices; i++)
   {
      cv::gpu::DeviceInfodev_info(i);
      if (dev_info.isCompatible())
      {
         enable_device_id =i;
      }
   }
   if (enable_device_id < 0)
   {
      std::cerr << "GPU module isn't built for GPU"<< std::endl;
      system("pause");
      return -1;
   }
   cv::gpu::setDevice(enable_device_id);
   cv::Mat src_image= cv::imread("test.jpg");
   cv::imshow("0.0",src_image);
   cv::Mat dst_image;
   begintime =cv::getTickCount();
 

   cv::gpu::GpuMatd_src_img;// (src_image);//upload src image to gpu 
   d_src_img.upload(src_image);
   cv::gpu::GpuMatd_dst_img;
   cv::gpu::cvtColor(d_src_img, d_dst_img, CV_BGR2GRAY);//////////////////canny 
   d_dst_img.download(dst_image);//download dst image to cpu 
//  cv::cvtColor(src_image, dst_image, CV_BGR2GRAY);
   endtime =cv::getTickCount();
   cv::imshow("test",dst_image);
   std::cerr << 1000*(endtime - begintime) / cv::getTickFrequency() << std::endl;
   cv::waitKey(0);
   return 0;
}}

}}opencv的GPU加速的重编译过程_第2张图片opencv的GPU加速的重编译过程_第3张图片

采用GPU加速的时候,同样的操作(还加上了上下载)用时为7点几ms,而用常规方法,用时为27点几ms。有一个问题是,一般使用GPU加速的话,第一次调用GPU,会很慢很慢,一条简单的语句都用了10多秒左右。治标不治本的解决方法是在程序的开头加上一句cv::gpu::GpuMata(10, 10, CV_8U);,这样会令耗时的操作放在一开头,不那么影响后面的操作时间(即使加了计算能力值,也是会第一步慢点)。弄好之后,可以把opencv.sln工程清除解决方案,就可以把这个工程的大小压缩一半而不影响功能(通常是差不多10G变成5G左右)。

opencv的GPU加速的重编译过程_第4张图片
 

 

在其他电脑上面把重编译的文件移植到自己电脑里面:

这不需要重编译了,要做的是配置。首先自己的电脑要安装上同样版本的cuda,要有tbb文件,cmake就不需要用到了,显卡最好是同样的型号的(我移植的时候是同样的型号,不同型号不知道行不行,我觉得理论上是可以的)。

加入以下的路径到环境变量的path里面:

D:tfilestbb41_20130613oss\bin\intel64\vc12

D:\tfiles\tbb43_20150424oss\include

D:\tfiles\tbb43_20150424oss/lib/intel64

D:\tfiles\opencv-2.4.9\build-vs2013\install\x64\vc12\bin

然后把你电脑环境变量原来的opencv路径删掉,或者放到新opencv路径后面。以上需要注意的是,上面那里路径是我电脑的,你添加是根据你自己电脑的安装位置来灵活处理;你要用vs的32位编译平台,那上面那些64位路径就相应的改成32位,打开电脑的环境变量path,看看cuda那些路径有没有64的,有就改成相应的32路径(不是说直接把64改成32,而是这个路径相应的改一下),64位编译平台亦然;搞完这些环境变量,就重启电脑,开始测试有没有移植成功。参照http://blog.csdn.net/xuhang0910/article/details/45601035的cuda项目opencv配置环境下面的测试步骤。

 

 

备注:

减少首次运行时间长问题:http://blog.sina.com.cn/s/blog_b1e24f1d0102wsdr.html

opencv的GPU加速的重编译过程_第5张图片

opencv的GPU加速的重编译过程_第6张图片

opencv的GPU加速的重编译过程_第7张图片

 

在一些大的工程里面,单单添加包含GPU头文件的语句,就会出错,如图:

opencv的GPU加速的重编译过程_第8张图片

解决方法:在前面添加两句话,如图。

http://www.aiuxian.com/article/p-1679180.html 

opencv的GPU加速的重编译过程_第9张图片

下面是用GPU计算特征点的opencv改造过程

opencv的GPU加速的重编译过程_第10张图片

你可能感兴趣的:(计算机视觉)