![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Ув.программисты, помогите пожалуйста найти оптимальное решение.
Программа делает скрин, вырезает определенную его часть и делает поиск количества пикселов определенного цвета, данной функцией: Код:
Суть проблеммы: Как определить мерцающую точку ? , точка мерцает красным цветом и естественно скрин попадает постоянно на оттенок красного. Последний раз редактировалось Admin, 04.10.2011 в 12:12. |
#2
|
|||
|
|||
![]() мерцает от красного к белому, плавно?
|
#3
|
|||
|
|||
![]() Цитата:
Последний раз редактировалось AlekseySV, 04.10.2011 в 11:43. |
#4
|
|||
|
|||
![]() можно как-нибудь через colortorgb
там r - оттенок красного g должно быть примерно равно b на крайний случай придётся преобразовать rgb в hsv или hls Последний раз редактировалось Pyro, 04.10.2011 в 11:51. |
#5
|
|||
|
|||
![]() Насчет RGB не представляю возможным применение, я пытался вычислить R и изначально думал что если R > B и R > G то будет примерно красный но к сожалению желтый цвет к примеру имеет: R = 255, G = 225, B = 105 ,как здесь понять что это желтый а не красный? (примерно сравнивать B и G , насколько примерно ? ). Я уверен есть правильное решение, но какое... (код должен быть не только правильный, но и максимально быстрый.)
Последний раз редактировалось AlekseySV, 04.10.2011 в 12:55. |
#6
|
|||
|
|||
![]() тогда rgbtohsv поможет
h - оттенок спектра, красный в начале вообще без скринов состояний этой точки трудно что-либо конкретное советовать |
#7
|
|||
|
|||
![]() Насчет rgbtohsv с определением значения h, я думаю даст нужный результат, но преобразование Color в RGB, а затем в HSV да еще и для каждого пиксела однозначно ударит по производительности.
Вечером прийду с работы, попробую применить rgbtohsv в коде, о результате отпишусь. |
#8
|
|||
|
|||
![]() Используйте xor пикселей только что полученной картинки с пикселями картинки, полученной некоторое время назад. При совпадении получите 0 (пиксель не менялся => не мерцает => анализировать не надо), при отличиях - не ноль. Определить правильно красный будет так: (R>200)and(G<50)and(B<50). Или так: (R>G+B+100). Или еще кучей способов. Все они в большей или меньшей степени работоспособны. Конкретные числа определите сами в зависимости от обстоятельств.
И еще. Используйте bmp.ScanLine, без нее все будет очень-очень медленно. И перед обработкой сделайте так: bmp.PixelFormat:=pf24bit - много времени не займет а от неприятных сюрпризов избавит. P.S. Уберите эту бессмыссленную переменную Resultat, замените ее на Result. |