Winform中使用Opencv-OpenCVSharp

本文详细介绍了在C#中使用OpenCVSharp进行图像处理的实际操作经验,包括解决安装过程中遇到的错误,如using OpenCVSharp报错及Mat类使用问题。作者分享了两种安装方法的对比和调试心得。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本人新写博客,文笔不太好,请见谅。

C#下使用OpenCV可以使用EmguCV,但是是通过把C++封装成动态链接库在C#中调用,这样在修改算法的过程中就会非常的不方便,封装DLL的时候也比较麻烦。在C#中除了Emgucv之外,还有一种叫做OpenCVSharp的工具,从名字就可以看出其是OpenCV提供给C#的接口。OpenCVSharp是OpenCV的.NET wrapper,它比Emgucv更接近于原始的OpenCV,并且有很多的样例参考,其采用LGPL发行,对商业应用友好(基本上相当于BSD)
转载自:https://blog.youkuaiyun.com/jameshater/article/details/79642384

我在按照https://blog.youkuaiyun.com/jameshater/article/details/79642384的方法设置OpenCVSharp,所用的编译软件是VS2010,他的两种方法我都尝试过,但是却遇上了一些问题,最后解决了,写下博客记录一下。

  先说第一种,NuGet.安装法(就允许我这样称呼它),安装过程原博客有,我就不写了,只说遇到的问题,如下图。

发现连using OpenCVSharp都会出错。

解决方法:

by:2019年1月29日

右键项目属性,在应用程序那里将目标框架改成不带“Profile=Client”的,这个是简化版,少了很多支持项。

如图:

然后就可以using了。

第二种:

我原先用的是最新的,2018712的安装包,可惜本人能力有限,思想古老,跟不上时代,2018712安装完后using OpenCVSharp到时没问题,可惜,我用Mat的时候却一堆错误,然后我查了下别的博客,然后在官网上找到2016622的安装包,按照第二种方法再安装一次,编译倒是通过了,我离成功已经非常接近了!就差看效果!!可惜,出现了如图的错误,深陷bug不能自拔。

然后我又查了别的博客,脑洞大开,我将两种方法糅合在了一起。

  首先,我用第一种方法在项目上安装好OpenCVSharp的库,这是当然出现了bug,然后我再用下载的OpenCVSharp的2016622版本,用这个的库里面的OpenCVSharp.dll替代第一种方法生成的OpenCVSharp.dll(引用),如下图:

,在第一种方法之后,在我的项目下会生成一个packages文件夹,然后将packages\OpenCvSharp3-AnyCPU.3.4.1.20180830\NativeDlls\x64(x86也行)的两个.dll复制到我的项目的dubug文件夹下面,竟然被我调通了!!!开心ing。。。。,上代码:

效果:

by:2019年1月29

这种虽然安装好了,但是我却发现在使用toBitmap的时候库错误,后来又研究了一下安装,最后在第一种里面完善了。

希望能帮助到看到的人。

如果有人用了我这种方法也出现这种错误的话请参考第一种重新安装吧。

### 如何在 WinForms 中集成和使用 OpenCvSharp 进行图像处理 #### 安装 OpenCvSharp 为了能够在 Windows Forms 应用程序中使用 OpenCvSharp,首先需要安装该库。可以通过 NuGet 包管理器来完成这一过程: ```shell Install-Package OpenCvSharp4.runtime.win Install-Package OpenCvSharp4.Windows ``` 这会下载并配置好所有必要的依赖项以便于后续开发工作[^1]。 #### 创建一个新的 Windows Forms 项目 启动 Visual Studio 并创建新的 C# Windows Forms App (.NET Framework),命名为 `OpenCvSharpWinFormDemo` 或者其他合适的名字。 #### 添加引用到窗体设计文件 打开 Form 的设计器视图,在工具箱里找到 PictureBox 控件拖拽至表单上作为显示区域;另外还需要添加按钮 Button 来触发事件处理逻辑,比如加载图片、应用滤镜等操作。 #### 编写代码实现图像处理功能 双击按钮进入点击事件处理器方法内部编写如下所示的简单示例代码,这段代码实现了从本地磁盘读取一张彩色照片,并将其转化为灰度版本再呈现在界面上的功能[^2]。 ```csharp using Cv = OpenCvSharp; private void btnLoadImage_Click(object sender, EventArgs e) { OpenFileDialog openFileDialog = new OpenFileDialog(); if (openFileDialog.ShowDialog() == DialogResult.OK) { string filePath = openFileDialog.FileName; // 使用 OpenCvSharp 加载图像 using Mat srcMat = CvImgCodecs.ImRead(filePath); pictureBox1.Image?.Dispose(); // 清除之前的图像 // 将 Mat 对象转换成 Bitmap 类型以适应 PictureBox 控件的要求 Image imgToShow = srcMat.ToBitmap(); pictureBox1.SizeMode = PictureBoxSizeMode.Zoom; pictureBox1.Image = imgToShow; } } private void btnConvertToGray_Click(object sender, EventArgs e) { if(pictureBox1.Image != null){ // 转换为灰色图像 using var grayMat = new Mat(); Cv.Cv2.CvtColor(new Mat(pictureBox1.Image), grayMat, ColorConversionCodes.BGR2GRAY); // 更新PictureBox中的图像 pictureBox1.Image.Dispose(); pictureBox1.Image = grayMat.ToBitmap(); }else{ MessageBox.Show("请先加载一幅图像!"); } } ``` 上述代码展示了两个主要的操作:一是通过对话框选取要处理的照片路径并呈现出来;二是当按下特定按钮时执行颜色空间转变——即将 RGB 彩色模式转变为单一通道亮度表示法即所谓的“灰阶”。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值