网上关于emgucv 3.2版本的使用说明很少,都是一些老版本的,很多函数都不一样了,所以自己整理一下emgucv 3.2的基本用法,包括打开摄像头,人脸跟踪,视频录像
1.配置安装详见地址点击打开链接(http://www.cnblogs.com/xh6300/p/5941986.html)
2.emgucv-windesktop 3.2.0.2682下载地址 点击打开链接(https://sourceforge.net/projects/emgucv/postdownload?source=dlp)
安装完毕之后,在安装目录下“\emgucv-windesktop 3.2.0.2682\Emgu.CV.Example”是存放的Emgucv的例子,本文通过修改CameraCapture的源码实现人脸跟踪,视频录像
编译环境:vs2013+.net4.0+emgucv-windesktop 3.2
运行效果
具体实现:
1.摄像头操作
主要使用VideoCapture类进行操作;在事件ImageGrabbed中处理的显示,代码如下
try
{
_capture = new VideoCapture();
_fps = (int)(_capture.GetCaptureProperty(CapProp.Fps));
//_capture.SetCaptureProperty(CapProp.FrameWidth,1280);
//_capture.SetCaptureProperty(CapProp.FrameHeight, 720);
_capture.ImageGrabbed += ProcessFrame;
}
catch (NullReferenceException excpt)
{
MessageBox.Show(excpt.Message);
}
2.人脸检测
封装了一个类DetectFace,进行人脸和眼睛的检测,训练库使用的emgu自带的haarcascade_frontalface_default.xml和haarcascade_eye.xml
//人脸检测
long detectionTime;
List faces = new List();
List eyes = new List();
DetectFace.Detect(_frame, @"haarcascade_frontalface_default.xml", @"haarcascade_eye.xml", faces, eyes, out detectionTime);
foreach (Rectangle face in faces)
CvInvoke.Rectangle(_frame, face, new Bgr(Color.Red).MCvScalar, 2);
foreach (Rectangle eye in eyes)
CvInvoke.Rectangle(_frame, eye, new Bgr(Color.Blue).MCvScalar, 2);
3.视频录像
使用了VideoWriter类,只需要调用Write方法就可以把摄像头里得到的帧写入到视频文件中;但是要注意格式
mp4视频保存方法:
_videoname = DateTime.Now.ToString("yyyyMMddHHmmss") + ".mp4";
_fps = 5;
_writer = new VideoWriter(_videoname, VideoWriter.Fourcc('D', 'I', 'V', 'X'), _fps, new System.Drawing.Size(_capture.Width, _capture.Height), true);
string videoname = Path.Combine(filepath, DateTime.Now.ToString("yyyyMMddHHmmss") + ".avi");
VideoWriter writer = new VideoWriter(videoname, fps, new System.Drawing.Size(frameW, frameH), true);
现在好像不能上传0分的资源了???
源码下载地址
附emgu3.2下载地址