爵士
我是Emgu CV的新手。我正在制作一个人脸识别软件。我能够使用HaarCascade xml分类器检测到脸部。但是我在下一步如何识别脸部时会陷入困境。任何人请告诉我如何使用MatchTemplate函数...
我在互联网上找到了这段代码
Image<Gray, Byte> templateImage = new Image<Gray, Byte>(bmpSnip);
Image<Gray, float> resultImage = sourceImage.MatchTemplate(templateImage,Emgu.CV.CvEnum.TM_TYPE.CV_TM_CCOEFF_NORMED);
float[,,] matches = resultImage.Data;
for (int x = 0; x < matches.GetLength(1); x++)
{
for (int y = 0; y < matches.GetLength(0); y++)
{
double matchScore = matches[y, x, 0];
if (matchScore > 0.75)
{
Rectangle rect = new Rectangle(new Point(x,y), new Size(1, 1));
imgSource.Draw(rect, new Bgr(Color.Blue), 1);
}
}
我不明白这段代码......首先这段代码不起作用....其次如果有人知道如何正确地做...请发布代码.....
答案 0 :(得分:3)
MatchTemplate方法是为匹配具有定义功能的对象而设计的。面对你和我可能对MatchTemplate中使用的FFT方法有定义的特征,定义特征对于面部识别来说根本不够大。 Surya是正确的,因为比较会很有趣,我建议最好的方法是将模板面部图像的区域与相机识别的面部相匹配。因此,例如,您将采用眼睛的位置并将MatchTemplate应用于相同的位置,并平均匹配这些功能以估计整体准确度。
然而,您固有的重要问题是执行时间。使用大型面数据库MatchTemplate不会显着减少数据集以允许实时处理。
特征识别器是一种更安全,更有效的方法。它比创建自己的算法更可靠,速度更快。请参阅我的文章,了解如何实施它:
http://www.codeproject.com/Articles/261550/EMGU-Multiple-Face-Recognition-using-PCA-and-Paral
希望这有帮助,
干杯,
克里斯