Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2007.04.22;
Скачать: [xml.tar.bz2];

Вниз

Быстрое сравнение картинок   Найти похожие ветки 

 
Cash ©   (2006-05-20 07:05) [0]

Есть два Canvas с одинаковыми размерами. Один несет эталонное
изображение, а другой - тестируемое. Как можно очень быстро
проверить идентичность тестируемого изображения.

Ведь Pixels свойство довольно медленная штука!


 
antonn ©   (2006-05-20 08:33) [1]

создать битмап, скопировать на него канвас, пройтись scanline()


 
antonn ©   (2006-05-20 08:33) [2]

...удалить битмап

забыл главное:)


 
Cash ©   (2006-05-20 11:48) [3]

Эх, товарищ! Еслиб это все так просто было!
Вот представь себе если такая ерунда будет около 25-50-200 раз в секунду
срабатывать! (последняя цифра примерна)
Такую тревиальщину я бы и без вопросов всяких сделал. :)

antonn, ты с HBITMAP знаком? Или мож у HDC есть что в этом роде.
(в смысле проверки)


 
MBo ©   (2006-05-20 12:59) [4]

какие размеры?


 
Cash ©   (2006-05-20 13:01) [5]

MBo ©   (20.05.06 12:59) [4]:
16x16
24x24
32x32
64x64


 
MBo ©   (2006-05-20 13:27) [6]

>Cash
С таким размером - не проблема проверять несколько тысяч раз в секунду
Откуда берется тестовое изображение?


 
Cash ©   (2006-05-20 13:59) [7]

С десктопа, а точнее с области чужого окна.
Я его захватываю, беру HDC с хендла, пихаю это в канву и могу спокойно
на ней рисовать. Тока канву я не для рисования взял, а для анализа,
подумал, что так лучше. Просто по определенным координатам надо
взять область (16х16 к примеру) и посмотреть, совпадает ли она с эталоном.

Дак вот только проверка и осталась! Что то мне подсказывает, что там
вроде с маской или еще чем можно обойтись. Я попробовал с помощью Pixels
пройтись по всей области чужого окна, но это авантюра! Так медлено!

Уж очень неохота тревиальным перебором обходиться! :)


 
MBo ©   (2006-05-20 14:17) [8]

Образец - Dib-bitmap нужного размера. Перед каждой проверкой делаешь его копию, отрисовываешь ы нее Bitblt нужный кусок с исходного контекста в xor-режиме. При этом одинаковые пикселы станут черными, разные - нечерными.
Остается только выполнить проверку одной картинки - для скорости используй ScanLine или http://www.delphimaster.ru/articles/pixels/index.html


 
Don Nikola ©   (2006-05-20 15:49) [9]

Вопрос, а какого рода картинки?
Если у тебя конечное количество эталонов, то можно проверять не весь битмап, а только один-два пикселя, что на порядки быстрее.
Так, например, можно дешево определить масть карты в java-игре на деньги ;)
И соответственно сделать авто-игрока, например в 21 с вероятностью в твою пользу.


 
antonn ©   (2006-05-20 16:10) [10]

Cash ©   (20.05.06 11:48) [3]
Вот представь себе если такая ерунда будет около 25-50-200 раз в секунду

создаешь битмап один раз, удалишь при закрытии программы.
а насчет скорости, я битмапы по 128*128 выводил с частотой больше, чем 300 (именно через сканлайн выводил, попиксельно), т.ч. ничего невозможного. Правда я процессор терзал неслабо:)


> antonn, ты с HBITMAP знаком?

нет, не знаком, не представился случай:)


 
Cash ©   (2006-05-20 16:15) [11]

MBo ©   (20.05.06 14:17) [8]:
Спасибо! Это как раз то, про что моя дырявая башка забыла!!! :)))

ЗЫ: А канвас веравно рулит! :)


 
Dimka Maslov ©   (2006-05-24 16:31) [12]

1. Через обращение к ScanLine вычислить MD5 эталона
2. Потом вычислить MD5 второй картинки.
3. Сравнить, если MD5 двух картинок равны картинки абсолютно идентичны


 
antonn ©   (2006-05-24 17:13) [13]

Dimka Maslov ©   (24.05.06 16:31) [12]
1. Через обращение к ScanLine вычислить MD5 эталона

хм... а зачем тогда сканлайн() ?


 
Cash ©   (2006-05-24 17:20) [14]

Dimka Maslov ©   (24.05.06 16:31) [12]:
Бр-р-р-р... чет мне это быстрым не кажется! Да и к тому же я не знаю
как MD5 вычислять!

Не, я все уже решил, мне надо быто именно получить черную или чуть чуть
не черную картинку, а там у меня есть приемчик один.
(со scanline конечно)



Страницы: 1 вся ветка

Форум: "Игры";
Текущий архив: 2007.04.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.044 c
4-1164645015
Альберт
2006-11-27 19:30
2007.04.22
получение хэндла окна из TShellExecuteInfo


2-1175510625
Cara
2007-04-02 14:43
2007.04.22
Поменять расширение.


15-1174899957
db2admin
2007-03-26 13:05
2007.04.22
Где достать информацию по IntelliJ Idea на русском?


2-1175244701
YadlU
2007-03-30 12:51
2007.04.22
Преобразование Даты в Число


15-1171458450
@!!ex
2007-02-14 16:07
2007.04.22
Мифы о Linux. Чем же она всеткаи хуже Windows?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский