C# 控制 Webcam [using Emgu]

这篇主要是去说明如何利用C#去控制你的网络摄影机,

且是使用Emgu这套dll
甚么是Emgu?
他和OpenCV有点关联,
OpenCV
相信不管是Java, C, C++language的开发者,都了解OpenCV是甚么!?
简单说,OpenCV是一套强大的图像处理library,由INTEL开发,
非常强大,甚至你可以利用OpenCV去做到OCR,很方便。
也由于OpenCV没有支持C#,那C#要怎么使用OpenCV?
就是靠EmguEmgu是一套允许OpenCVfunctionC#等语言中被使用。

但我们这边并不会使用到OpenCV的功能,
就是简单的介绍Emgu很基本的功能,
就是存取摄影机,
首先先去下载Emgu,并且安装
安装完成以后就可以开始写程序....

看你是要开启一个WPF专案,还是一个Window Form专案,
建议你开启Window Form,因为到时Webcam回传回来的image型态,
可以直接在 Window Form中的pictureBox里面使用。

开启以后,就在你的项目中加入reference
加入以下四个dlldll的位置就是在你安装Emgu位置的bin底下:

  1. Emgu.CV.dll
  2. Emgu.CV.ML.dll
  3. Emgu.CV.UI.dll
  4. Emgu.Util.dll


加入以后,请先储存你的项目,储存以后请在你安装Emgu位置的bin底下找到两个dll

  1. opencv_core231.dll
  2. opencv_highgui231.dll

把这两个dll放置到你的项目的/bin/Debug/底下。
因为Emgu.CV.dll会使用到上述两个dll


完成上述动作以后就开始写codeimport会使用到的lib,如下:

using Emgu.CV;
using Emgu.CV.Structure;

先宣告一个Capture对象,如下(这个对象就是用来链接到你的webcam):

private Capture cap = null;                 // Webcam对象


接着在Form1_Load event中,连结到摄影机以及建立一个event用来抓取画面,如下:

private void Form1_Load(object sender, EventArgs e)
{
     cap = new Capture(0); // 连结到摄影机0,如果你有两台摄影机,第二台就是1
     Application.Idle += new EventHandler(Application_Idle); // 在Idle的event下,把画面设定到pictureBox上(当然你也可以用timer事件)
}

接下来要写抓取画面eventcode:

voidApplication_Idle(object sender, EventArgs e)
{
     Image<Bgr, Byte> frame =cap.QueryFrame(); // 去query该画面
     pictureBox1.Image = frame.ToBitmap(); // 把画面转换成bitmap型态,在喂给pictureBox组件
}

完成以后按下F5执行,应该就可以顺利取得摄影机画面!

 

你可能感兴趣的:(C# 控制 Webcam [using Emgu])