这篇主要是去说明如何利用C#去控制你的网络摄影机,
且是使用Emgu这套dll,
甚么是Emgu呢?
他和OpenCV有点关联,
OpenCV相信不管是Java, C, C++等language的开发者,都了解OpenCV是甚么!?
简单说,OpenCV是一套强大的图像处理library,由INTEL开发,
非常强大,甚至你可以利用OpenCV去做到OCR,很方便。
也由于OpenCV没有支持C#,那C#要怎么使用OpenCV呢?
就是靠Emgu,Emgu是一套允许OpenCV的function在C#等语言中被使用。
但我们这边并不会使用到OpenCV的功能,
就是简单的介绍Emgu很基本的功能,
就是存取摄影机,
首先先去下载Emgu,并且安装,
安装完成以后就可以开始写程序....
看你是要开启一个WPF专案,还是一个Window Form专案,
建议你开启Window Form,因为到时Webcam回传回来的image型态,
可以直接在 Window Form中的pictureBox里面使用。
开启以后,就在你的项目中加入reference,
加入以下四个dll,dll的位置就是在你安装Emgu位置的bin底下:
加入以后,请先储存你的项目,储存以后请在你安装Emgu位置的bin底下找到两个dll,
把这两个dll放置到你的项目的/bin/Debug/底下。
因为Emgu.CV.dll会使用到上述两个dll。
完成上述动作以后就开始写code,先import会使用到的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事件) }
接下来要写抓取画面event的code:
voidApplication_Idle(object sender, EventArgs e) { Image<Bgr, Byte> frame =cap.QueryFrame(); // 去query该画面 pictureBox1.Image = frame.ToBitmap(); // 把画面转换成bitmap型态,在喂给pictureBox组件 }
完成以后按下F5执行,应该就可以顺利取得摄影机画面!