当前位置: 首页 > 网络知识

OpenCV与CUDA简介

时间:2026-01-29 09:25:02

  因为算法的需要,正常的CPU算法速度不够需要进行加速,OpenCV中正好加入了GPU计算的模块,OpenCV中有两种GPU的加速方式,一种是通用标准的opencl,另一种是NVIDIA的cuda加速。opencl是苹果公司提出的一种通用标准,多种平台支持的标准。cuda是NVIDIA提出的并行计算平台,只有NVIDIA的显卡支持,但是比起opencl,cuda在使用上更方便,因为opencl是开放标准,封装上做的可能没有那么好,现在NVIDIA的显卡使用的多一些,所以cuda也就比较多用。

  使用OpenCV的cuda必须要编译附加库的模块contrib,这个附加库中又许多核心库没有的内容,如:特征匹配,跟踪,cuda等内容,个人不太喜欢用cmake,但是还不能不用,因为cmake配置有点错误,编译的时候就会报错,编译时间长的话,到最后才报错就特别坑,尤其是cuda的编译,cuda的编译时间特别的长,主要是因为cuda存在对计算能力的兼容性的问题,默认要编译好多架构,这样会导致编译时间特别的长,我机器的显卡是  GTX1050Ti,所以计算能力属于10系列,16年后发布的10系列的显卡基本上都在5.0以上,我们日常用的机器中安装的显卡基本上都是gtx系列,NVIDIA最新发布的显卡能达到8,不过我的cuda9.2兼容只能到7.0,再高编译的时候就报错。cuda编译的时候需要注意必须提前安装cuda,否则编译也不通过,还有就是我没有安装cuda的dnn,所以编译的时候没有选择dnn,如果想要使用dnn,还要再安装cuda对应版本的dnn,不然编译仍然会报错。

  另外opencv编译的时候如果不想编译出一大堆的lib文件,可以选择world选项,之后编译的时候会生成world.lib,但是有一点不太好就是,如果编译有问题要全部重新生成。

  编译成功后,需要引入cuda相关的头文件,OpenCV3以后的头文件都以cuda开头,最长用的应该是

1 #include <opencv2\cudaarithm.hpp>//矩阵相关的计算 2 #include <opencv2\cudafilters.hpp>//各种滤波器

  OpenCV中也为cuda图像运算提供了一种类型GpuMat,与Mat类似,同时cuda的调用封装与不同的调用也基本没有差距,只不过属于cv::cuda空间。

1 GpuMat gpu; 2 Mat mat; 3 4 gpu.upload(mat); 5 doSething(); 6 gpu.download(mat);

  GpuMat 的调用过程基本上与cuda是一样的,只不过做了一层封装,上传图像到Gpu,运算后再下载到CPU。

  许多函数都进行了封装,调用起来也非常方便,当然如果CPU传输到GPU的时间比运算所要的时间都要长,那么就没必要去GPU进行运算了,因为每次上传下载都非常耗费时间,所以GPU运算未必会变快。



上一篇:CUDA 安装(一看就会)
下一篇:软件设计师考试(软考)
OpenCV CUDA
  • 英特尔与 Vertiv 合作开发液冷 AI 处理器
  • 英特尔第五代 Xeon CPU 来了:详细信息和行业反应
  • 由于云计算放缓引发扩张担忧,甲骨文股价暴跌
  • Web开发状况报告详细介绍可组合架构的优点
  • 如何使用 PowerShell 的 Get-Date Cmdlet 创建时间戳
  • 美光在数据中心需求增长后给出了强有力的预测
  • 2027服务器市场价值将接近1960亿美元
  • 生成式人工智能的下一步是什么?
  • 分享在外部存储上安装Ubuntu的5种方法技巧
  • 全球数据中心发展的关键考虑因素
  • 英特尔与 Vertiv 合作开发液冷 AI 处理器

    英特尔第五代 Xeon CPU 来了:详细信息和行业反应

    由于云计算放缓引发扩张担忧,甲骨文股价暴跌

    Web开发状况报告详细介绍可组合架构的优点

    如何使用 PowerShell 的 Get-Date Cmdlet 创建时间戳

    美光在数据中心需求增长后给出了强有力的预测

    2027服务器市场价值将接近1960亿美元

    生成式人工智能的下一步是什么?

    分享在外部存储上安装Ubuntu的5种方法技巧

    全球数据中心发展的关键考虑因素