【发布时间】:2018-12-25 08:26:23
【问题描述】:
我是 Emgucv 的新手,我正在研究面部运动方向检测 我在互联网上遇到过很多代码,但它们很难理解。
那么您能否提供一个简单易懂的代码或链接来学习这种情况。
提前致谢
【问题讨论】:
我是 Emgucv 的新手,我正在研究面部运动方向检测 我在互联网上遇到过很多代码,但它们很难理解。
那么您能否提供一个简单易懂的代码或链接来学习这种情况。
提前致谢
【问题讨论】:
基于此:
Bitmap bmp = new Bitmap(); // your bitmap contain a face
Mat mat = GetMatFromSDImage(bmp);
using (var nextFrame = mat.ToImage<Bgr, Byte>())
{
if (nextFrame != null)
{
Image<Gray, byte> grayframe = nextFrame.Convert<Gray, byte>();
Rectangle[] faces = mHaarCascade.DetectMultiScale(grayframe, 1.1, 10, Size.Empty);
if (faces.Count() > 0)
{
// some faces are detected
// you can check the X and Y of faces here
}
}
}
private Mat GetMatFromSDImage(Bitmap image)
{
int stride = 0;
System.Drawing.Rectangle rect = new System.Drawing.Rectangle(0, 0, image.Width, image.Height);
System.Drawing.Imaging.BitmapData bmpData = image.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite, image.PixelFormat);
System.Drawing.Imaging.PixelFormat pf = image.PixelFormat;
if (pf == System.Drawing.Imaging.PixelFormat.Format32bppArgb)
{
stride = image.Width * 4;
}
else
{
stride = image.Width * 3;
}
Image<Bgra, byte> cvImage = new Image<Bgra, byte>(image.Width, image.Height, stride, (IntPtr)bmpData.Scan0);
image.UnlockBits(bmpData);
return cvImage.Mat;
}
所以faces 包含Rectangle 边界面的数组。您可以检查矩形的X 和Y 属性以检查它是否移动并将其与初始位置进行比较以检测其方向。
根据评论更新
为了检测头部旋转,一个简单的解决方案可以是眼睛检测。您可以使用haarcascade_eye.xml 来检测是。然后你可以计算每只眼睛的X和Y位置的旋转。
Here你可以找到一个简单的眼睛检测示例
【讨论】: