Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.04.22;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.075 c
2-1175678391
sergeyst
2007-04-04 13:19
2007.04.22
Версия программы


1-1172611883
SamProf
2007-02-28 00:31
2007.04.22
Помогите!!! Error - Не был произведен вызов CoInitialize


15-1175140245
Карелин Артем
2007-03-29 07:50
2007.04.22
Подскажите софт для скачивания сайтов целиком.


15-1174876350
Slider007
2007-03-26 06:32
2007.04.22
С днем рождения ! 25 марта


2-1175095227
MaLoY
2007-03-28 19:20
2007.04.22
Помогите с задачкой