当图像上有多个模板时,ExhaustiveTemplateMatching Rectangle不起作用

时间:2018-01-19 13:52:11

标签: c# aforge template-matching accord.net

我一直致力于使用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!");
        }
    }
}

1 个答案:

答案 0 :(得分:0)

foreach 循环中,您应该使用 m 变量而不是 matchings [0] matchings [0] 代表列表中的第一项,因此您总是绘制相同的(第一个)匹配项。