как сравнить bmpхи др с другом
Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду
Срочно надо что-то придумать, тема такая: водим оранжевым прицелом пистолета по экрану (ну те по стене, через проектор все происхоит) и стреляем, надо определить в каком месте мишень в момент нажатия. при выстреле мы делаем снимок web-камерой - единственная > < работающая идея, и пытаемся сравнить кактинку без мишени с захваченной в момент выстрела, но толком как это сделать придумать не можем. за помощь в реализации этой херни (или может у кого другой алгоритм созреет) плачу wm.
скажу еще для ясности: это что-то вроде тира, в руках пистолет водим прицелом по стене и стреляем по мишеням (нажатие курка вызывает событие левого щелчка), снимаем в момент выстрела камерой...
респект всем кто хоть попытается помочь :shock: [/i]
скажу еще для ясности: это что-то вроде тира, в руках пистолет водим прицелом по стене и стреляем по мишеням (нажатие курка вызывает событие левого щелчка), снимаем в момент выстрела камерой...
респект всем кто хоть попытается помочь :shock: [/i]
Попробуй найти инфу об устройстве световых пистолетов для приставок. ИМХО, там все намного проще должно быть.
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Сфотографированный квадратик (если я правильно понял задачу) надо "прикладывать" на исходное изображение (которое видимо проецируется на стену) и найти то место, где все совпадает. Так?
Если поXORить эталон с маленьким кусочком, то при условии идентичности кусочка и закрываемого им пространства, в месте такого "прикладывания" получится черный квадрат.
Идея заключается в том, чтобы многократно "прикладывать" (со сдвигом по X и Y) этот кусочек с операцией XOR. То место, где прикладывание даст наичернейший результат - и есть искомая позиция.
Накладывание маленького битмапа на определенное место большого с операцией XOR -это наистандартнейшая функция WinAPI. Оценить "черность" полученного результата можно подсчитывая средний цвет точки. Возможно обычное среднее арифметическое - это плохой выбор... Тут прийдется немного подумать.
Оптимизировать процедуру поиска можно начав с предполагаемого места прицеливания, а затем задавая сдвиг по X и Y обходя предполагаемое место прицеливания по спирали.
Если предполагаемых мест прицеливания несколько, то можно попробовать делать несколько поисков в несколько параллельных потоков.
Если поXORить эталон с маленьким кусочком, то при условии идентичности кусочка и закрываемого им пространства, в месте такого "прикладывания" получится черный квадрат.
Идея заключается в том, чтобы многократно "прикладывать" (со сдвигом по X и Y) этот кусочек с операцией XOR. То место, где прикладывание даст наичернейший результат - и есть искомая позиция.
Накладывание маленького битмапа на определенное место большого с операцией XOR -это наистандартнейшая функция WinAPI. Оценить "черность" полученного результата можно подсчитывая средний цвет точки. Возможно обычное среднее арифметическое - это плохой выбор... Тут прийдется немного подумать.
Оптимизировать процедуру поиска можно начав с предполагаемого места прицеливания, а затем задавая сдвиг по X и Y обходя предполагаемое место прицеливания по спирали.
Если предполагаемых мест прицеливания несколько, то можно попробовать делать несколько поисков в несколько параллельных потоков.
>>Накладывание маленького битмапа на определенное место большого с операцией XOR -это наистандартнейшая функция WinAPI.
А называется эта функция bitblt
А называется эта функция bitblt
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Угу.
А как оценить "черность" результата?
А как оценить "черность" результата?
Ууу, мы же еще не учли, что проецируется изображение из одной точки, а игрок стоит в другой. Таким образом, изображение по краям будет растянутым и не совпадет с оригиналом... грустно.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Еще мы не учли необходимость гамма-коррекции, так как у камеры цветопередача может оказаться другой.....
Потому я и не говорю, что получится черный...
К черту края!
Где получистя ченее всего, это оно и есть. Или я не прав?
Потому я и не говорю, что получится черный...
К черту края!
Где получистя ченее всего, это оно и есть. Или я не прав?
Не всегда. Если взять для примера черно-белое изображение, то похожие цвета 10000000 и 01111111 при XORe дадут 11111111, т.е. белый.
Тэк-с. С растром мы зашли в тупик: у нас получается искаженное по координатам и по цвету изображение, которое мы должны найти на неискаженном оригинале. Может, попробовать перетрассировать растр в векторную форму?
Тэк-с. С растром мы зашли в тупик: у нас получается искаженное по координатам и по цвету изображение, которое мы должны найти на неискаженном оригинале. Может, попробовать перетрассировать растр в векторную форму?
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.