【问题标题】:How to perform to Template Matching in Emgu CV如何在 Emgu CV 中执行模板匹配
【发布时间】:2012-02-21 20:08:06
【问题描述】:

先生,

我是 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);
}
}

我没看懂这段代码……首先这段代码不起作用……其次,如果有人知道如何正确执行……请发布代码.....

【问题讨论】:

  • 你试过什么?你在谷歌上找到了什么,你有什么源代码供人们查看?一个快速的谷歌显示了很多关于使用模板匹配的点击以及关于人们遇到的问题的问题。
  • 有些链接说我们必须使用Eigen faces...有些说我们可以直接使用MatchTemplate函数。如果您发布有关使用MatchTemplate()的代码并识别将非常有帮助脸……

标签: c# opencv emgucv opencvdotnet


【解决方案1】:

MatchTemplate 方法最初设计用于匹配具有定义特征的对象。一张脸,而对您和我来说,可能对 MatchTemplate 中使用的 FFT 方法具有定义特征,但定义特征根本不足以进行人脸识别。 Surya 是正确的,因为比较会很有趣,我建议最好的方法是将模板人脸图像的区域与相机识别的人脸进行匹配。因此,例如,您将获取眼睛的位置并将 MatchTemplate 应用到同一位置,然后对匹配这些特征进行平均以估计整体准确度。

然而,您固有的重大问题是执行时间。使用大型人脸数据库,MatchTemplate 不会显着减少数据集以允许实时处理。

特征识别器是一种更安全有效的方法。它比创建自己的算法更可靠,速度也更快。请在此处查看我的文章,了解如何实现它:

http://www.codeproject.com/Articles/261550/EMGU-Multiple-Face-Recognition-using-PCA-and-Paral

希望这会有所帮助,

干杯,

克里斯

【讨论】:

  • 这篇文章真的很棒!在过去的几个小时里,我一直在对您的示例代码进行黑客攻击——非常感谢您显然付出的所有努力。
  • Cheers RedFilter 非常感谢。如果您想识别未知面孔,请查看文章下方的 cmets,因为我在那里提到了如何做到这一点,干杯
猜你喜欢
  • 1970-01-01
  • 2012-04-02
  • 2016-07-16
  • 2013-10-09
  • 2015-04-14
  • 2011-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多