это довольно грубая область (сравнение нечеткой логики), которая, так сказать, намного выше моей зарплаты.
Я пытаюсь написать программу, которая будет обнаруживать морковь (и другие овощи)на экране из игры и возвращать совпадающие координаты x, y для каждого найденного совпадения.
Цель состоит в том, чтобы отслеживать каждый раз, когда растет овощ (в 5 раз), и в конечном итоге автоматизировать полив / сбор овощей (как только вы увидите скриншоты, это будет иметь больше смысла).
Iпопытался использовать код сравнения изображений, расположенный по адресу http://sites.google.com/site/serinolorenzo/blackmask
, на самом деле он работает безупречно при поиске на этом скриншоте (и захваты рабочего стола) http://imageshack.us/photo/my-images/24/mac8.png/
для экземпляров этого изображения ... http://imageshack.us/photo/my-images/249/carrotplant.png/
Он находит и возвращает несколько координат меню «Семена моркови».
Однако, когда я приступаю к обнаружению овощей (мясо и картофель того, что нужно сравнивать), он не может найтисовпадение.
Я пробовал различные "морковные" скриншоты, совсем недавно ... http://imageshack.us/photo/my-images/829/carrotlight1t.png/
к изображению http://imageshack.us/photo/my-images/408/macnolight1.png/
(мне пришлось повернутьв игре выключил освещение, когда я попал сюда, чтобы цвета оставались неизменными независимо от времени игры.
Я подумал (просматривая исходный код для сравнения изображений), что черный будет игнорироваться, поэтому я 'я точно не уверенЭто происходит, но сейчас он просто не найдет соответствия, даже если я установлю пороги ниже.
Существуют ли (хорошо документированные) библиотеки для этого, так как кодирование с нуля - это нечтоЯ не могу сделать в данный момент.
За исключением этого (и если кто-то читает, у него есть время), вы можете увидеть, где я иду не так?
Код, который я используюсделать тестирование это ...
public void tester()
{
Bitmap screenshot;
screenshot = new Bitmap(@"c:\MyMercurial\ATITDVeggieMacro\ATITDVeggieMacro\Images\macnolight1.bmp");
Bitmap searchFor;
searchFor = new Bitmap(@"c:\MyMercurial\ATITDVeggieMacro\ATITDVeggieMacro\Images\wholecarrot.bmp");
int ac1;
int ac2;
ArrayList test = BlackMask.Search(screenshot,searchFor,
0,10,75,5,80,20,100,true,out ac1,out ac2);
statusUpdate = ac1.ToString()+"good,"+ ac2.ToString()+" bad/ X=";
}
(я просто обновляю пути к файлам, когда хочу изменить изображения).
(Бонусный вопрос, как мне использовать относительные пути, чтобы сказатьэто просто пойти вверх по двум каталогам, а затем вниз в папку «Изображения», я вообще не могу вспомнить относительные сочетания путей)
Спасибо за любую помощь, ребята, это заставило меня хлопнуть себя по лбу.