首页 > 其他分享 >OpenCV与CUDA简介

OpenCV与CUDA简介

时间:2023-08-11 09:44:38浏览次数:36  
标签:编译 简介 NVIDIA OpenCV cuda GPU 显卡 CUDA

  因为算法的需要,正常的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 doSomething();
6 gpu.download(mat);

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

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

标签:编译,简介,NVIDIA,OpenCV,cuda,GPU,显卡,CUDA
From: https://www.cnblogs.com/ybqjymy/p/17622240.html

相关文章

  • CUDA 简单程序的基本框架和自定义设备函数
    1cuda程序的基本框架框架包含:头文件常量或者宏定义C++自定义函数和cuda核函数的原型声明main函数C++自定义函数核CUDA核函数的定义实现其中main函数中1intmain()2{3分配主机与设备代码内存4初始化主机中的数据5将某些数据从主机复制到设备6调用核函数在设备......
  • 《CUDA编程:基础与实践》读书笔记(4):CUDA流
    1.CUDA流一个CUDA流指的是由主机发出的在一个设备中执行的CUDA操作序列。除主机端发出的流之外,还有设备端发出的流,但本文不考虑后者。一个CUDA流中的各个操作按照主机发布的次序执行;但来自两个不同CUDA流的操作不一定按照某个次序执行,有可能是并发或者交错地执行。任何CUDA操作......
  • CUDA 编程基础
    基于c/c++的编程方法支持异构编程的扩展方法简单明了的apis,能够轻松的管理存储系统cuda支持的编程语言:c/c++/python/fortran/java…1、CUDA并行计算基础异构计算CUDA安装CUDA程序的编写CUDA程序编译利用NVProf查看程序执行情况gpu不是单独的在计算机中完成任......
  • JSON简介
    1、什么是JSONJSON是一种与开发语言无关的、轻量级的数据格式。全程JavaScriptObjectNotation。是一种数据格式的规范优点:易于阅读和编写,易于解析和生产一个简单的JSON样例: 2、标准的JSON数据表示数据结构:Object:使用花括号{}包含的键值对结构,key必须是String类型,value......
  • opencv-python 车牌检测和识别
    首先利用级联分类器把车牌位置找到取出来,然后用ocr进行车牌识别。1 OCR之Tesseract安装Tesseract安装可以参考这个链接: https://blog.csdn.net/m0_53192838/article/details/127432761 写的比较详细,我在使用的时候有一个报错有点意思,记录一下: Tesseractocr识别报错:tesser......
  • opencv-python 人脸人眼检测
    人脸检测:在一张图像中判断是否存在人脸并找出人脸所在的位置。人脸识别:在人脸检测的基础上收集人脸数据集合进行处理保存信息,将输入人脸与保存的信息进行比对校验,得到是否为其中某个人脸。特征值:以某种特定规则对输入源进行处理得到具有唯一性质量化的值,在人脸识别中特征值的提......
  • orchestrator系列(一)--简介及安装
    orchestrator是一款开源对MySQL复制提供高可用、拓扑的可视化管理工具,采用go语言编写,它能够主动发现当前拓扑结构和主从复制状态,支持MySQL主从复制拓扑关系的调整、支持MySQL主库故障自动切换(failover)、手动主从切换(switchover)等功能。orchestrator后台依赖于MySQL存储元数据......
  • opencv-python 视频前后景分离
    背景分离(BS)是一种通过使用静态相机来生成前景掩码(即包含属于场景中的移动对象像素的二进制图像)的常用技术。BS计算前景掩码,在当前帧与背景模型之间执行减法运算,其中包含场景的静态部分,或者更一般而言,考虑到所观察场景的特征,可以将其视为背景的所有内容。前后景分离分为两步:第一步......
  • opencv-python 视频处理
    视频是由图片组成的,视频的每一帧就是一幅图片,一般是30帧,表示一秒钟显示30张图片。opencv中可以用 VideoCapture来捕获摄像头,用数字表示不同的设备,比如0,1。如果是视频文件,直接指定路径即可。VideoCapture类提供了初始化,打开视频文件或设备,视频帧捕获,视频文件或设备关闭,属性设......
  • C#实现PS曲线调整,OpenCV实现
    曲线原理 对于一个RGB图像, 可以对R, G, B通道进行独立的曲线调整,即,对三个通道分别使用三条曲线(Curve)。还可以再增加一条曲线对三个通道进行整体调整。 因此,对一个图像,可以用四条曲线调整。最终的结果,是四条曲线调整后合并产生的结果。比如:对红色通道定义一条曲线如下......