我是Emgucv的新手,正在从事面部移动方向检测 我在Internet上遇到过很多代码,但是很难理解。
因此,请您提供一个简单易懂的代码或链接以了解这种情况。
预先感谢
答案 0 :(得分:0)
基于此:
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,您会找到一个简单的眼睛检测示例