OpenCVSharp使用GPU和Cuda

这篇具有很好参考价值的文章主要介绍了OpenCVSharp使用GPU和Cuda。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景:在C#项目实践中,对与图像处理采用opencv优选的方案有两种,EMGU.CV和OpenCVSharp。

以下是两个的比较:

Opencv方案 许可证 速度 支持 易用性
OpenCVSharp 许可证是阿帕奇2.0可以随意用 CPU 上手简单
EMGU.CV 许可证商用时需要随软件开放源代码 相对慢 CPU、GPU 需要学习

默认OpenCVSharp不支持GPU,主因是OpenCV需要根据不同的Cuda版本进行编译,第一耗时长、第二版本多,因此编译不起。

目的:介绍在C#中使用OpenCVSharpGPU的编译过程,解决工程化CPU的性能瓶颈、及机器学习算法结合的时候性能提升问题。

一、准备

GPU电脑准备,需要安装适合版本的cuda 及cudnn。

检测安装成功:

nvcc --version

安装CMacker

cmake --version

安装Visualstudio2022(已安装其它版本也可以)

需要选择c++组件

安装Git

先准备一个基础目录

d:\opencvbuild
--opencv
--opencv_contrib
--opencvcuda
--opencvsharp
--opencvsharpcuda
--test

二、构建OpenCV

下载OpenCV源码

cd d:\opencvbuild\opencv
git clone https://github.com/opencv/opencv

下载opencv_contrib代码,需要与Opencv版本匹配

cd d:\opencvbuild\opencv_contrib
git clone https://github.com/opencv/opencv_contrib

CMake设置

#源目录
d:\opencvbuild\opencv
#目标目录
d:\opencvbuild\opencvcuda
#编译器
vs2022
#点击Config
cuda关键字,勾选所有
ENABLE_FAST_MATH关键字,勾选
modules,设置contrib模块路径:d:\opencvbuild\opencv_contrib\opencv_contrib-xxx\modules
BUILD_opencv_world,可选
OPENCV_ENABLE_NONFREF,可选

点击Configure,等待完成后,点击Generate,再点击Open Project

三、编译OpenCV

通过CMaker打开VS2022,选择Release X64位,编译右侧解决方案

1,右键编译“ALL BUILD”,等一个小时
2,右键编译“INSTALL”

查看编译结果

cd d:\opencvbuild\opencv\opencvcuda\install
dir

四、编译OpenCVSharp

下载OpenCVSharp

cd d:\opencvbuild\opencvsharp
git clone https://github.com/shimat/opencvsharp
#在源码根目录,创建opencv_file文件夹,拷贝已编译文件给opencvsharp
mkdir opencv_files
cd opencv_files
mkdir opencv470_win_x64
xcopy /e /i /y "d:\opencvbuild\opencv\opencvcuda\install\include" "d:\opencvbuild\opencvsharp\opencv_files\opencv470_win_x64"
xcopy /e /i /y "d:\opencvbuild\opencv\opencvcuda\install\x64" "d:\opencvbuild\opencvsharp\opencv_files\opencv470_win_x64"

4.1 编译OpenCvSharpExtern C++工程

修改C++工程文件

记事本打开"opencvsharp\src\OpenCvSharpExtern"目录下“OpenCvSharpExtern.vcxprojOpenCvSharpExtern.vcxproj”文件
以我下载的源码是4.7为准,查找所有470,替换为正确的路径和位置。

VS2022设置工程

右键OpenCvSharpExtern工程,C/C++->预处理->预处理器定义,添加“ENABLED_CUDA”

VS2022编译工程文件

vs2022打开OpenCvSharp.sln
选择Release X64位,右键编译OpenCvSharpExtern工程

问题排查

1,OpenCvSharpExtern工程文件打不开,说明之前的修改c++文件改坏了,从新clone下
2,乱码错误,首先检查是否是X64编译
3,乱码错误,大概率是c++工程->VC++目录->库目录   设置不对

4.2 编译OpenCvSharp C#工程

VS2022设置工程

生成->条件编译符号->所有都加上"ENABLED_CUDA"

项目维护者已经好久不维护Gpu的支持了,编译工程会报大量错误

1,命名空间错误,添加必备的引用
2,DLL引用错误,一般都是因为全局常量DllExtern在NativeMethods下定义的,因此调对命名空间就行
3,需要将OpenCvSharpExtern.dll添加到工程并设置输出为文件。
4,部分缺失的函数可以注释掉

五、测试

添加引用:

OpenCvSharp.dll

拷贝C++扩展到输出目录

OpenCvSharpExtern.dll

拷贝OpencvCuda的Dll到输出目录

opencv460_win_x64\x64\vc17\bin\*.dll

在test目录,创建新的测试程序,需要选择X64 Debug

using OpenCvSharp;
using OpenCvSharp.Cuda;

Console.WriteLine("Hello, World!");
var count = Cv2.GetCudaEnabledDeviceCount();
Console.WriteLine(count);

六、总结

整个编译完整下来可能要一天时间。

OpenCVSharp支持的API有限,只支持:

1,GpuMat

2,设备检测

3,缓存

其余需要自己对应实现,工程量比较大,我正在整理它的扩展,也仅限于我能用到的Capture、关键算法等。

整体工程量比较大,后续更新。文章来源地址https://www.toymoban.com/news/detail-495342.html

到了这里,关于OpenCVSharp使用GPU和Cuda的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C#使用OpenCv(OpenCVSharp)图像局部二值化处理实例

      本文实例演示C#语言中如何使用OpenCv(OpenCVSharp)对图像进行局部二值化处理。 目录 图像二值化原理 局部二值化 自适应阈值 实例 效果

    2024年02月13日
    浏览(55)
  • C#使用OpenCv(OpenCVSharp)图像直方图均衡化处理实例

    本文实例演示C#语言中如何使用OpenCv(OpenCVSharp)对图像进行直方图均衡化处理。 直方图均衡化原理 直方图均衡化(Histogram Equalization)是一种常用的图像增强技术,用于改善图像的对比度和亮度分布。它通过重新分配图像灰度级的像素值,使得图像的直方图在灰度范围内更加

    2024年02月07日
    浏览(97)
  • YOLOv5图像和视频对象生成边界框的目标检测实践(GPU版本PyTorch错误处理)

    识别图像和视频里面的对象,在计算机视觉中是一个很重要的应用,比如无人驾驶,这个就需要实时的检测到周边环境的各种对象,并及时做出处理。目标检测在以往的文章中有重点讲解过几种,其中 Faster R-CNN的源码解读,本人做了一个系列 ,有兴趣的可以查阅: MXNet的F

    2024年02月11日
    浏览(46)
  • C#图像处理-OpenCVSharp教程:OpenCVSharp与EmguCV的比较与介绍

    C#图像处理-OpenCVSharp教程:OpenCVSharp与EmguCV的比较与介绍 图像处理在计算机视觉和计算机图形学等领域发挥着至关重要的作用。本教程将介绍在C#中使用OpenCVSharp和EmguCV这两个流行的图像处理库,它们提供了丰富的功能和强大的性能。 一、OpenCVSharp介绍与特点 OpenCVSharp是OpenCV的

    2024年02月21日
    浏览(40)
  • 深入了解OpenCVSharp中常见的图像处理功能

    OpenCVSharp是C#语言中用于图像处理和计算机视觉的开源库,它提供了丰富的功能和算法,能够帮助开发者轻松处理图像数据并实现各种视觉任务。本文将介绍OpenCVSharp中常见的图像处理功能,包括图像加载与保存、图像基本操作、图像滤波、边缘检测、图像分割等,并附带相应

    2024年03月23日
    浏览(59)
  • C#图像处理-OpenCVSharp教程:安装配置与简单实例

    C#图像处理-OpenCVSharp教程:安装配置与简单实例 在本教程中,我们将学习如何在C#中使用OpenCVSharp进行图像处理。首先,我们会介绍OpenCVSharp的安装和配置过程,然后我们将展示一些简单实例来演示图像处理的基本功能。 一、安装与配置OpenCVSharp 下载OpenCVSharp库文件 首先,我们

    2024年03月09日
    浏览(39)
  • 计算机视觉任务图像预处理之去除图像中的背景区域-------使用连通域分析算法(包含完整代码)

    通过连通域分析算法能够找到最大的连通域,即图片的主体部分,然后保存该连通域的最小外接矩阵,即可去除掉无关的背景区域 更多图像预处理操作工具集包含在这个github仓库中

    2024年02月06日
    浏览(56)
  • C# OpenCVSharp图像入门_给绿幕图片视频加背景

    OpenCV的全称是Open Source Computer Vision Library,是一个跨平台的计算机视觉库。OpenCV是由英特尔公司发起并参与开发,以BSD许可证授权发行,可以在商业和研究领域中免费使用。OpenCV可用于开发实时的 图像处理计算机视觉以及模式识别程序。该程序库也可以使用英特尔公司的IPP进

    2024年02月13日
    浏览(46)
  • 数字图像处理(实践篇)二十二 使用opencv进行人脸、眼睛、嘴的检测

    目录 1 xml文件 2 涉及的函数 3 实践 使用opencv进行人脸、眼睛、嘴的检测。 1 xml文件 方法① 下载  地址:https://github.com/opencv/opencv/tree/master/data/haarcascades 点击haarcascade_frontalface_default.xml文件 对着Raw右键,选择“链接另存为”,选择代码所在的路径即可,就可以下载这个文件啦

    2024年02月03日
    浏览(48)
  • 数字图像处理(实践篇)二十七 Python-OpenCV 滑动条的使用

    目录 1 涉及的函数 2 实践 1 涉及的函数 ⒈ setWindowProperty()用于设置GUI应用程序的属性 参数 : ① 

    2024年01月25日
    浏览(66)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包