Интересуюсь компьютерным зрением и автоматизацией. Теперь я хочу найти маленькое изображение на другом большом изображении. Для Python я видел большое количество кода, и у них все работает. Но у меня это почему-то не работает.
Исходные файлы:
var sourceImage = Cv2.ImRead("path");
var template = Cv2.ImRead("path");
var resultImage = new Mat();
Cv2.MatchTemplate(sourceImage, template, resultImage, TemplateMatchModes.CCoeffNormed);
Cv2.MinMaxLoc(resultImage, out _, out double maxVal, out _, out OpenCvSharp.Point maxLoc);
Rect rect = new Rect(maxLoc, new Size(template.Width, template.Height));
Cv2.Rectangle(sourceImage, rect, new Scalar(0, 255, 0), 2);
Cv2.ImShow("Result", sourceImage);
Cv2.WaitKey(0);
это результат
вы можете увидеть, что не работает, на последнем скриншоте. И должна обнаружиться маленькая картинка поплавка. Что находится выше в исходном файле
Я думаю, что изображение исходного файла того, что вы ищете, слишком велико. Посмотрите на прямоугольник, который находит ваша программа: он намного больше, чем вам нужно, чтобы вместить наживку.
Вам следует изменить размер изображения до размера, который вы видите на большом изображении. Если этот размер можно изменить в игре (например, увеличить или уменьшить масштаб), попробуйте проверить разные размеры и выбрать наиболее подходящий.
(Кроме того, я думаю, вам, возможно, лучше отрезать листовую часть наживки, потому что таким образом вы включаете много фона, который может быть, а может и не быть водой, и вам лучше смотреть только на белую часть наживки. Кроме того, отрежьте больше зеленой части изображения, потому что на изображении приманка также может иметь желтый и красный фон, что может вызвать у вас проблемы. Возможно, в C# есть способ импортировать изображение только с удаленным фоном и. использовать для вычислений только нефоновую часть?)
«Но у меня это почему-то не работает». - Это недостаточное описание вашей проблемы. Расскажите, что именно «не работает». Чего вы ожидаете, что вы видите вместо этого и что вы уже пробовали безуспешно?