ExhaustiveTemplateMatching Rectangle не работает, если на изображении более одного шаблона

Я работал над своим проектом, который включает в себя исчерпывающее сопоставление шаблонов с использованием 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 ответ

Решение

В вашем цикле foreach вы должны использовать переменную m вместо соответствий [0]. соответствия [0] представляют первый элемент в вашем списке, поэтому вы всегда рисуете одно и то же (первое) соответствие.

Другие вопросы по тегам