Шаблонирование с использованием EMGU CV - PullRequest
0 голосов
/ 24 марта 2020

Я пытаюсь использовать TemplateMatching из резюме EMGU, чтобы найти (сопоставить) изображение шаблона в исходном изображении.

Ниже приведен код (пример взят из Stack Overflow)

public static void TemplateMatch()
{
    Image<Bgr, Byte> sourceImg = new Image<Bgr, Byte>(@"D:\ImageA.png");
            Image<Bgr, Byte> templateImg = new Image<Bgr, Byte>(@"D:\ImageB.png"); 
    Image<Bgr, byte> lastImage = sourceImg.Copy();
    using (Image<Gray, float> resultImg = sourceImg.MatchTemplate(templateImg, Emgu.CV.CvEnum.TemplateMatchingType.CcorrNormed))
    {
        double[] minVal, maxVal;
        System.Drawing.Point[] minLocations, maxLocations;
        resultImg.MinMax(out minVal, out maxVal, out minLocations, out maxLocations);
        if (maxVal[0] > 0.9)
        {
            Rectangle match = new Rectangle(maxLocations[0], templateImg.Size);
            lastImage.Draw(match, new Bgr(Color.Red), 3);  
        }
        ImageViewer.Show(lastImage);
    }
}

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

Мне предложили l oop по шкалам изображения, чтобы найти совпадение. Но я не уверен, как это сделать в C#.

Здесь моя цель - найти изображение A (шаблонное изображение) на изображении B (исходное изображение), используя сопоставление с шаблоном в C# независимо от масштабирования и разрешения.

...