Помощник
Здравствуйте, гость ( Вход | Регистрация )
|
|
17:03:2008, 05:20
|
|
Новенький ![]() Группа: Программист Сообщений: 19 Регистрация: 12:02:2006 Пользователь №: 2 933 Специализация: Delphi, локальные сети. Репутация: 0
|
В общем задача такова, загружается в программу bmp файл в TImage и в нем есть некоторый обект который нужно измерить. Пользователь мышкой растягивает линию и программа в зависимости от длины линии пишет размер данного объекта в мм. Расширение картинки 640-480, что узнать количество пикселей на мм можно в кадр засунуть шаблон с заранее известным размером и по нем уже расчитать отношение мм/пиксели.
Проблема в том, каким макаром сделать чтоб можно было рисовать линию мышкой (т.е. щелкнул, началось рисование дальше растянул в нужную строну, щелкнул - закончилась линия, потом рачиталась ее длина, а если не понравилось щелкнул второй кнопкой мыши и линия исчезла и начал измерение заново). Заранее спасибо за ответ. |
|
Сообщение
#1
|
|
![]() |
|
|
17:03:2008, 08:02
|
|
Божественный ![]() ![]() ![]() ![]() ![]() Группа: Модеры Сообщений: 904 Регистрация: 19:11:2003 Пользователь №: 133 Репутация: 11
|
1. Определяешь контекст устройства (дисплея): hdc:=GetDC(0);
2. Определяешь горизонтальное соотношение пиксель /мм: kh:=GetDeviceCaps(hdc, HORZRES)/GetDeviceCaps(hdc, HORZSIZE); 3. Определяешь вертикальное соотношение пиксель/мм: kv:=GetDeviceCaps(hdc, VERTRES)/GetDeviceCaps(hdc, VERTSIZE); Используя коэффициенты переводишь мм в пиксели. |
|
Сообщение
#2
|
|
|
|
17:03:2008, 12:06
|
|
Новенький ![]() Группа: Программист Сообщений: 19 Регистрация: 12:02:2006 Пользователь №: 2 933 Специализация: Delphi, локальные сети. Репутация: 0
|
Извините, но какой смысл имеют параметры kh:=GetDeviceCaps(hdc, HORZRES)/GetDeviceCaps(hdc, HORZSIZE);
и kv:=GetDeviceCaps(hdc, VERTRES)/GetDeviceCaps(hdc, VERTSIZE); Если я их определяю у меня получается одно число - 3,79 что оно обозначает и как его приписать до моей идеи??? Может я не понятно объяснил, но тема такова с видео источника я захватываю картинку в формате BMP и каждые 10мин я их сохраняю на винте, в кадре есть монета, размер которой я знаю вне зависимости от масштаба и увеличения. Таким образом я могу щелкнув мышкой в двух ее крайних точках и собственно расчитав длину линии полученной между этими двумя точками расчитать отношение мм к пикселям. ПРоблема в том как сделать "РЕЗИНОВУЮ" линию, которая тянулась бы за мышкой при ее перемещении. Тогда при отпускании я бы засек координаты и уже расчитав по известному соотношению выдал бы результат. В принципе программа предназначена дя того чтобы контролировать троцесс прорастания семян, т.е. каждые 10 мин нужно измерять длину проростка. Я думал делать это вышеописанным способом. Но теперь есть идея. Может просто сделать попиксельное сканирование картинки сохранить в массив все точки с их цветами, а потом посто анализировать изменение цвета фона (он белый) на зеленый или около того и просто делать контур и уже както расчитывать это математически???? Но с меня сильный математик не очень, может у кого-то есть идеи. З.Ы. В кадре около 10 семян, в день более 100 фотографий конечно вручную измерить все это очень тяжело, математический подход был бы очень желательный!!! |
|
Сообщение
#3
|
|
![]() |
|
Текстовая версия | Сейчас: 6:07:2008 - 00:37 |