|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
Delphi 6-7 Работа с данными тепловизора
Задача - сграбить с экрана фирменной утилиты тепловизора термограмму и найти температуры нужных точек перемещая мышь по изображению.
Фирменная утилита в своей форме в ОНЛАЙН показывает как веб-камера красочное изображение температурного поля, рядом горит шкала палитры от синего до красного и второй вариант - как радуга. Границы температур заданы +18 до +103С, тоесть я точно знаю что самый синий это +18 а самый красный +108 градусов цельсия. Всего точек - 310 штук. Накидав код переходя одного цвета в другой я рисую палитру и по коэффициенту получаю зависимость цвет-температура... Но, как всегда НО... палитра прибора содержит зелёный цвет!!! сравнив их визуально а потом и разложив на RGB. У меня нет оттенка жёлтого а у них есть. Сравнивая чисто по величине TColor (R,G,B)я почти попадаю в цвет, но иногда сумма цветов даёт такое число что попадает в границу отличную от искомой - так как цвета не чистые.. Причём с радугой ещё сложнее!! там цвета дважды уходят в максимум и минимум!! и одно число скажем 8934546+-50 будет и внизу палитры и вверху палитры а цвет то сильно будет отличаться!!! по этому прямое сравнение по числу TColor не катит. Есть другие модели HSV/CMYK - но они же не годятся для захвата с экрана и конвертация всегда идёт с ошибками. Какая модель использована и как можно вычислить палитру? (фирмачи SDK не дают ) Пример 3х палитр во вложении. |
#2
|
||||
|
||||
У TColor цветовая модель не RGB, а BGR (если я правильно помню), т.е. два цвета переставлены местами. Сам когда-то наступил на эти грабли...
|
#3
|
|||
|
|||
Да, это так, но я цвета не в ручную вытаскиваю а стандартными функциями.
Как найти формулу расчёта палитры разложенной на составляющие.. ил перевести её в HUE/CMUK.. чтобы получить линейную зависимость. Наврняка же использована готовая технология/формула. |
#4
|
|||
|
|||
Для CMYK в D7 есть готовые функции (см здесь пример, ну и можешь просто использовать этот класс для удобства: https://www.tek-tips.com/faqs.cfm?fid=7480)
Перевод в HSV см тут: https://www.swissdelphicenter.ch/en/...de.php?id=2349 |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
Guaho (04.04.2020)
|
#5
|
|||
|
|||
Да, спасибо, я выбрал палитру сине-красную, так как она имеет по одному переходу мин/макс каждого цвета. Радуга вообще по 2 на каждый цвет...
Для сравнения точки палитры и точки под указателем мыши на картинке по началу пробывал тупо сравнивать каждый цвет с кажрым цветом - ничего не совпадало!!! причём совсем, в плодь до разброса на границы палитры.. потом осенило - надо считать среднеквадратичную погрешность - возводим все цвета (разности) в квадрат, суммируем и корень - чем получаем число тем ближе искомая точка к палитре, точность получил 2 градуса!!, а проведя корректировку границ палитры можно и в 0.5 на нужном диапазоне шкалы, края конечно немного заваливаются в шибки при этом, но там мне точность не нужна. И важное - надо отключить "прозрачность" - это дополнительная погрешность цветов!!! - наложение термограммы на видео поток. Думаю что задача решена на 50%, так как формула оригинальной палитры так и не получена.. |