c# winform gridview 动态按钮_C#下使用OpenCVSharp(.NET Framework wrapper for OpenCV)

  • 1. 序言

  • 2. OpenCVSharp在VS2017中的环境配置

  • 3. 利用OpenCVSharp实时读取摄像头视频

1. 序言

如何在C#里使用opencv去完成图像处理任务?偶然有朋友问起,这个问题其实也是也是我自己一直想探究一下的。目前支持界面开发的工具有很多,例如使用C++与QT进行开发。在视觉领域中,OpenCV针对C++有专用库,无论在windows还是Ubuntu下,与QT都有很好的支持。但是C++语言开发界面周期时间长,与C#相比,并且生成应用程序安装包比较大,不光是OpenCV相关库文件需要打包进应用程序安装包,还有QT界面相关的库文件也需要添加。过大的应用程序与简单的应用功能两者并不协调,因此使用C#进行界面逻辑开发,如果能有OpenCV的加持,就更好了。

目前针对C#的计算机视觉库主要有两种,EmguCV和OpenCVSharp,EmguCV的优势在于不仅仅提供了计算机视觉函数接口并且提供了一系列界面控件接口,但是是通过把C++封装成动态链接库在C#中调用,这样在修改算法的过程中就会非常的不方便,封装DLL的时候也比较麻烦。对于OpenCVSharp的工具,从名字就可以看出其是OpenCV提供给C#的接口。OpenCVSharp是OpenCV的 .NET wrapper,它比EmguCV更接近于原始的OpenCV。网上常见的免费版EmguCV则是GUN协议,任何发表都需要至少公布你的源代码,相比之下OpenCVSharp则是相对温和多的LGUN协议,对商业应用友好(基本上相当于BSD)。

这是OpenCVSharp项目地址,其中也给出了sample可以参考:https://github.com/shimat/opencvsharp

2. OpenCVSharp在VS2017中的环境配置

新建winform窗体工程,安装好之后,打开【工具】->【库程序包管理器】->【管理解决方案的NuGet程序包】,在其中搜索OpenCVSharp,选择合适的点击【安装】(最好安装最新的)。一直等待完成。

1bd4218ea49c770868b7ba2480a9f568.png

3b0faa4c0bc45aec4088d207c9e51878.png完成安装之后,需要将安装文件的DLL文件放置在项目可执行文件的Debug文件夹下,这里自动拷贝了。

e239a4464609f906547e28cb81dcf77b.png

3. 利用OpenCVSharp实时读取摄像头视频

97affe6cb2b5b0f51d78c0fdd5c54a1d.gif

在此贴出demo代码供参考:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading;

using System.Threading.Tasks;

using System.Windows.Forms;

using opencvsharp;

using OpenCvSharp.CPlusPlus;

using OpenCvSharp.Extensions;

namespace opencvsharp

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

public static Bitmap imgshow;

void run_cap()

{

Mat src = new Mat();

FrameSource frame = Cv2.CreateFrameSource_Camera(0);

while (true)

{

frame.NextFrame(src);

Bitmap bitmap = BitmapConverter.ToBitmap(src);

Invalidate();

pictureBox1.Invalidate();

imgshow = bitmap;

this.pictureBox1.Paint += PictureBox1_Paint;

}

}

private void button1_Click(object sender, EventArgs e)

{

// Image imgshow0 = Image.FromFile("src.jpg");

// pictureBox1.Image = imgshow0;

Thread threadA = new Thread(run_cap);

threadA.Start();

}

private void PictureBox1_Paint(object sender, PaintEventArgs e)

{

Invalidate(); pictureBox1.Invalidate();

e.Graphics.DrawImage(imgshow, 0, 0);

}

}

}

全部工程文件可以在后台回复 OpenCVSharp获取百度云链接。


版权声明:本文「CV调包侠」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值