結果の画像でテンプレートのすべてのインスタンスを見つけるために、このようなコードがいくつかあります。
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[,,] の座標を特定することに関係していると確信しています。
私が間違っている場所についてのアイデアはありますか?