Я пытаюсь использовать 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# независимо от масштабирования и разрешения.