Сопоставление шаблонов с использованием Emgu CV - не работает для нескольких шаблонов - PullRequest
0 голосов
/ 24 августа 2018

Я работаю над Emgu CV, и я не получаю результат для нескольких шаблонов в изображении, пожалуйста, проверьте приведенный ниже код и дайте мне знать, где я делаю ошибку. Я считаю, что допустил ошибку в то время как цикл - пожалуйста, исправьте меня, что мне нужно сделать, чтобы получить результаты.

using (Image<Bgr, byte> imgSrc = BaseImage.Copy())
{
    while (true)
    {
        using (Image<Gray, float> result = imgSrc.MatchTemplate(SubImage, TemplateMatchingType.SqdiffNormed))
        {
            CvInvoke.Threshold(result, result, 0.7, 1, ThresholdType.ToZero);
            double[] minValues, maxValues;
            Point[] minLocations, maxLocations;
            result.MinMax(out minValues, out maxValues, out minLocations, out maxLocations);
            if (maxValues[0] > Threashold)
            {
                Rectangle match = new Rectangle(maxLocations[0], SubImage.Size);
                imgSrc.Draw(match, new Bgr(Color.Blue), -1);
                rectangles.Add(match);
            }
            else
            {
                break;
            }
        }
    }
}

1 Ответ

0 голосов
/ 27 августа 2018

работает и обновил код в комментарии, который я изменил.

 using (Image<Bgr, byte> imgSrc = BaseImage.Copy())
    {
        while (true)
        {
           //updated and changed TemplateMatchingType- CcoeffNormed.
            using (Image<Gray, float> result = imgSrc.MatchTemplate(SubImage, TemplateMatchingType.CcoeffNormed)) 
            {
                CvInvoke.Threshold(result, result, 0.7, 1, ThresholdType.ToZero);
                double[] minValues, maxValues;
                Point[] minLocations, maxLocations;
                result.MinMax(out minValues, out maxValues, out minLocations, out maxLocations);
                if (maxValues[0] > Threashold)
                {
                    Rectangle match = new Rectangle(maxLocations[0], SubImage.Size);
                    imgSrc.Draw(match, new Bgr(Color.Blue), -1);
                    rectangles.Add(match);
                }
                else
                {
                    break;
                }
            }
        }
    }
...