当图像上有多个模板时,ExhaustiveTemplateMatching Rectangle 不起作用
ExhaustiveTemplateMatching Rectangle doesn't work when there is more than one template on image
我一直在处理我的项目,该项目涉及使用 C# 和 AForge.net 的详尽模板匹配。我设法构建了可查找模板的应用程序。嗯,差不多。当图像上只有一个模板时,它可以完美地工作。但是,当我在图像上有多个模板时尝试搜索一个模板时,它确实找到了所有模板(我知道这要感谢 MessageBox 和 foreach 循环),但矩形始终只显示一个。我该如何解决?
代码如下:
Bitmap Temp= new Bitmap(textBox2.Text);
Grayscale OW = new GrayscaleBT709();
Bitmap Template = OW.Apply(Temp);
ExhaustiveTemplateMatching tm = new ExhaustiveTemplateMatching(0.8f);
Bitmap Image = new Bitmap(textBox1.Text);
Bitmap GrayImage = OW.Apply(Image);
{
TemplateMatch[] matchings = tm.ProcessImage(GrayImage, Template);
Graphics g = Graphics.FromImage(Image);
if (matchings[0].Similarity > 0.8f)
{
foreach (TemplateMatch m in matchings)
{
int X = matchings[0].Rectangle.X;
int Y = matchings[0].Rectangle.Y;
g.DrawRectangle(new Pen(Color.Red, 3), X, Y, matchings[0].Rectangle.Width, matchings[0].Rectangle.Height);
ShowResult.Image = Image;
MessageBox.Show("Match found!");
}
}
}
在您的 foreach 循环中,您应该使用 m 变量而不是 matchings[0]. matchings[0] 表示列表中的第一项,因此您总是绘制相同的(第一个)匹配项。
我一直在处理我的项目,该项目涉及使用 C# 和 AForge.net 的详尽模板匹配。我设法构建了可查找模板的应用程序。嗯,差不多。当图像上只有一个模板时,它可以完美地工作。但是,当我在图像上有多个模板时尝试搜索一个模板时,它确实找到了所有模板(我知道这要感谢 MessageBox 和 foreach 循环),但矩形始终只显示一个。我该如何解决?
代码如下:
Bitmap Temp= new Bitmap(textBox2.Text);
Grayscale OW = new GrayscaleBT709();
Bitmap Template = OW.Apply(Temp);
ExhaustiveTemplateMatching tm = new ExhaustiveTemplateMatching(0.8f);
Bitmap Image = new Bitmap(textBox1.Text);
Bitmap GrayImage = OW.Apply(Image);
{
TemplateMatch[] matchings = tm.ProcessImage(GrayImage, Template);
Graphics g = Graphics.FromImage(Image);
if (matchings[0].Similarity > 0.8f)
{
foreach (TemplateMatch m in matchings)
{
int X = matchings[0].Rectangle.X;
int Y = matchings[0].Rectangle.Y;
g.DrawRectangle(new Pen(Color.Red, 3), X, Y, matchings[0].Rectangle.Width, matchings[0].Rectangle.Height);
ShowResult.Image = Image;
MessageBox.Show("Match found!");
}
}
}
在您的 foreach 循环中,您应该使用 m 变量而不是 matchings[0]. matchings[0] 表示列表中的第一项,因此您总是绘制相同的(第一个)匹配项。