我有一些这样的代码可以在结果图像中查找模板的所有实例。
Image<Gray, Byte> templateImage = new Image<Gray, Byte>(bmpSnip);
Image<Gray, float> imgMatch = sourceImage.MatchTemplate(templateImage, Emgu.CV.CvEnum.TM_TYPE.CV_TM_CCOEFF_NORMED);
然后循环通过 imgMatch.Data[,,] 属性检查分数是否超过阈值(例如> 0.75)并在图像上放置关于匹配的标记。但是比赛毫无意义,我怀疑我弄错了坐标。
float[,,] matches = imgMatch.Data;
for (int x = 0; x < matches.GetLength(0); x++)
{
for (int y = 0; y < matches.GetLength(1); y++)
{
double matchScore = matches[x, y, 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);
}
}
}
如果我使用 MinMax 如下:
double[] min, max;
Point[] pointMin, pointMax;
imgMatch.MinMax(out min, out max, out pointMin, out pointMax);
并设置一个标记(矩形)以突出显示匹配我得到了很好的结果。所以我很确定这与识别 imgMatch.Data[,,] 的坐标有关
关于我错在哪里的任何想法?