Содержит скриншот изображения или нет ?
Итак, я делаю проект на C# с Windows Forms, и у меня есть только одна проблема. Я должен сопоставить изображения со скриншотом. Если скриншот содержит одно из этих изображений, он должен вернуть его путь(путь не важен). Поэтому мне нужен метод, который может возвращать true, если скриншот содержит изображение, и возвращает false, если это не так. В этом случае возвращаемое значение не имеет значения.
Что я уже пробовал:
Я пытался использовать следующий код, но он всегда возвращает False, это означает, что скриншот не содержит ни одного из этих изображений. Я использую следующий код:
public static class imageCompare { public static string[] Compare(Bitmap bitmap) { string[] addressArray = Directory.GetFiles(Path.Combine(Directory.GetCurrentDirectory(), "Kartebi2"), "*.png"); string[] imageAddress = new string[addressArray.Length]; Bitmap[] bitmap1 = new Bitmap[36]; Bitmap[] bitmapImage = new Bitmap[36]; for (int i = 0; i < bitmap1.Length; i++) { bitmap1[i] = (Bitmap)System.Drawing.Image.FromFile(addressArray[i]); bitmapImage[i] = Form1.ConvertToFormat(bitmap1[i], System.Drawing.Imaging.PixelFormat.Format24bppRgb); } for (int i = 0; i < bitmapImage.Length; i++) { if(Matching.Compare(bitmap, bitmapImage[i])) imageAddress[i] = addressArray[i]; else imageAddress[i] = null; } return imageAddress; } } public static class Matching { public static bool Compare(this Bitmap template, Bitmap bmp) { const int divisor = 4; const int epsilon = 10; ExhaustiveTemplateMatching etm = new ExhaustiveTemplateMatching(0.9f); TemplateMatch[] tm = etm.ProcessImage(new ResizeNearestNeighbor(template.Width / divisor, template.Height / divisor).Apply(template), new ResizeNearestNeighbor(bmp.Width / divisor, bmp.Height / divisor).Apply(bmp)); if (tm.Length == 1) { Rectangle tempRect = tm[0].Rectangle; if (Math.Abs(bmp.Width / divisor - tempRect.Width) < epsilon && Math.Abs(bmp.Height / divisor - tempRect.Height) < epsilon) { return true; } } return false; } }
Поэтому, если у кого-то есть другая идея, как сделать это сравнение, скажите мне, пожалуйста.
Richard MacCutchan
Это может сработать только благодаря удаче или случайности. Если эти два изображения не будут на 100% точными во всех деталях, включая размер, форму и цвет, сравнение не удастся. Вам нужно изучить анализ изображений, чтобы понять, как это должно быть сделано.