|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
06.07.2011, 17:22 | #1 |
Уважаемый
Форумчанин
Регистрация: 04.07.2010
Сообщений: 318
|
Координаты пикселей.
Как получить координаты всех пикселей прямоугольника или линии выведенной Canvas-ом на компоненте TImage ?
даешь высокое напряжение
|
06.07.2011, 19:05 | #2 |
Форумчанин
Регистрация: 08.10.2010
Сообщений: 101
|
Как вариант - искать цвет пикселя, если совпадает с заданным, выводить его координаты. Но это только если такой цвет нигде, кроме прямоугольника, больше не используется в TImage.
"Думаешь, будет трудно? Конечно, будет! Но, только закаляя дух, людьми становятся люди!"
Последний раз редактировалось A-IX-2; 06.07.2011 в 19:33. |
06.07.2011, 20:33 | #3 | |
Уважаемый
Форумчанин
Регистрация: 04.07.2010
Сообщений: 318
|
Цитата:
2) Такой цвет встречается на TImage очень часто.
даешь высокое напряжение
|
|
06.07.2011, 21:39 | #4 |
Форумчанин
Регистрация: 08.10.2010
Сообщений: 101
|
Попробуйте от этого плясать:
Код:
"Думаешь, будет трудно? Конечно, будет! Но, только закаляя дух, людьми становятся люди!"
|
07.07.2011, 11:43 | #5 |
Форумчанин
Регистрация: 07.03.2009
Сообщений: 123
|
Если Вы сами рисуете прямоугольник - зачем его потом искать? - координаты же уже известны при рисовании. Или я что-то не понял?
--- Если требуется искать линии и/или прямоугольники на загруженном в TImage изображении, то имеет смысл проделать следующее: - бинаризировать изображение: суммируем компоненты цвета (если в RGB) каждого пикселя и сравниваем с пороговым значением. Если больше порога - закрашиваем clBlack, иначе clWhite. Порог можно выбирать динамически по среднему цвету соседних пикселей; - затем можно пройтись каким-нибудь фильтром (напр. Собеля): суть в том, что для каждого пикселя анализируется яркость его соседей и делается вывод - является точка граничной или нет. Можно граничные точки закрасить напр. clRed; - теперь находим линии и прямоугольники: тут можно воспользоваться алгоритмом Хаафа - от точки A до точки B считаем кол-во закрашенных точек с учетом разрывов и перегибов. Если набирается N закрашенных точек - делаем вывод: линия найдена. Разумно будет написать функцию для поиска линии и написать функцию для поиска прямоугольников, использующую первую функцию. ИМХО - как-то так, хотя можно предложить и другие реализации. Имейте в виду, что попиксельные операции могут занять продолжительное время: - используйте ScanLine и нужные структуры в зависимости от PixelFormat; - можно обрабатывать изображение в несколько потоков - каждый свой участок. Если нужно - помогу кодом.
Не говорите что мне делать, и я не скажу куда Вам идти.
Пишу программы на заказ на Delphi и Pascal Форум разработчиков Pascal и Delphi |
07.07.2011, 15:26 | #6 |
Уважаемый
Форумчанин
Регистрация: 04.07.2010
Сообщений: 318
|
Искать координаты каждого пикселя нужно затем, чтобы потом заполнить таблицу TStringGrid. Объясняю, что да как:
На форме есть TImage размером 200х200 пкс. Еще есть таблица TStringGrid с количеством строк и столбцов соответствующим размерам TImage (200х200). На TImage выводится Polygon (по-сути, это прямоугольник под углом 45 гр. относительно его центра). Задача заполнить таблицу так, что если пиксель с координатами 100х100 принадлежит полигону, то в таблице в строку 100 и столбец 100 нужно занести число 1. В общем, представить все пиксели прямоугольника в таблицу. Зачем это нужно? Это нужно для того, чтобы при движении мышью над пикселями полигона пользователь увидел определенное пояснение, т.е. размеры прямоугольника. Почему не сделать проще? Да затем, что на самом деле TImage имеет размеры 3100х1500 пкс, и подобных прямоугольников может быть довольно много и под разными углами выведенных (еще могут быть квадраты, овалы, круги, треугольники, шестигранники, ромбы и т.п.). А если определенный тип прямоугольников или другой фигуры (вернее, их пикселей) обозначу в таблице например 1, а другой тип например 2 и т.п., то я могу с легкостью их по-пиксельно идентифицировать, получив значение из таблицы (если "1" то прямоугольник такой-то и т.п.), и это все на событии OnMouseMove.
даешь высокое напряжение
|
07.07.2011, 15:29 | #7 | |
Уважаемый
Форумчанин
Регистрация: 04.07.2010
Сообщений: 318
|
Цитата:
даешь высокое напряжение
|
|
07.07.2011, 16:53 | #8 |
Форумчанин
Регистрация: 07.03.2009
Сообщений: 123
|
Фигуры, которые нужно идентифицировать рисуете Вы? или Вы загружаете изображение с уже нарисованными фигурами?
Не говорите что мне делать, и я не скажу куда Вам идти.
Пишу программы на заказ на Delphi и Pascal Форум разработчиков Pascal и Delphi |
07.07.2011, 17:26 | #9 |
Уважаемый
Форумчанин
Регистрация: 04.07.2010
Сообщений: 318
|
Рисую я. Если бы это были простые прямоугольники или квадраты, то я бы даже тему на создавал. Вся проблема в том, что используется алгоритм поворота изображения (в данном случае, это и есть тот прямоугольник, который мне нужно по-пиксельно идентифицировать) или Матрица поворота. Т.е. я уже не могу просто взять и посчитать пиксели как в обычной фигуре.
даешь высокое напряжение
|
07.07.2011, 18:23 | #10 |
Форумчанин
Регистрация: 07.03.2009
Сообщений: 123
|
Приведите пример размеров, которые необходимо выводить в подсказке.
И как быть в Вашем случае, если в каком-то пикселе фигура 1-ого типа и фигура 2-ого типа пересекаются? Мне кажется тут лучше хранить массив полигонов, а затем проверять входит ли точка в какой-либо полигон. Код:
Не говорите что мне делать, и я не скажу куда Вам идти.
Пишу программы на заказ на Delphi и Pascal Форум разработчиков Pascal и Delphi |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Координаты пикселей в Image | bulldog5293 | Общие вопросы Delphi | 2 | 28.02.2011 14:38 |
Проверка пикселей | Obey177 | Общие вопросы Delphi | 0 | 04.09.2010 10:05 |
Графика. Координаты пикселей. | KALISNIK | Помощь студентам | 0 | 28.03.2010 20:11 |
Изменение пикселей | Antitime | Мультимедиа в Delphi | 2 | 27.08.2009 17:37 |
Таблица пикселей | bl0w | Мультимедиа в Delphi | 1 | 19.01.2009 00:32 |