Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.11.2010, 00:25   #1
hatecows
Пользователь
 
Регистрация: 09.06.2010
Сообщений: 11
По умолчанию Распознавание цветной точки.

Пишу программку.
Суть проста: на рисунке, изображен предмет. На него светит лазер.(Лазерной указкой). Лазера на картинке не видно. Видно только точку , например красную.
Задача в том чтобы найти координаты этой точки. С этим то я справляюсь, если например я в пейнте нарисую красную точку,то я ее спокойно нахожу. Но как только беру фотку - тут приплыли.

Во - первых у нее не ровные края.
Во - вторых цвет точки на фотке не красный(то есть не 255 0 0 по RGB) а какой то оттенок.

Так вот вопрос.
Как мне распознать эту долбаную точку, если я нормально не могу цвет определить ? Как мне отфильтровать именно тот участок с точкой?

Например на таком рисунке как я прикрепил.

Или тут :http://www.instructables.com/id/Nintendo-Zapper-Laser/
Изображения
Тип файла: jpg Nintendo-Zapper-Laser.jpg (24.9 Кб, 78 просмотров)
hatecows вне форума Ответить с цитированием
Старый 03.11.2010, 00:38   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Ищите точки, у которых наибольшее R...
Я имею в виду RGB.
mihali4 вне форума Ответить с цитированием
Старый 03.11.2010, 00:43   #3
hatecows
Пользователь
 
Регистрация: 09.06.2010
Сообщений: 11
По умолчанию

Самое большое это 255 будет, но прикол такой, что вместе с 255 красного может быть еще от 0 до 255 зеленого и также синего, то есть еще куча оттенков, которые к красному не имеют отношения.
hatecows вне форума Ответить с цитированием
Старый 03.11.2010, 01:12   #4
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Да поймите же вы, что точка, у которой будет максимальный R и минимальные G,B - это и есть красная или красные оттенки...
Чему вас учат ?
И где вы тут нашли "приколы" ???
mihali4 вне форума Ответить с цитированием
Старый 03.11.2010, 01:23   #5
hatecows
Пользователь
 
Регистрация: 09.06.2010
Сообщений: 11
По умолчанию

Согласен. Но как мне тогда поступать, например с точкой у которой R 255 G 100 B 100?
Это еще красный или уже нет ?
Просто например на той картинке, если посмотреть - четкого ободка нету - она размыта, непонятно до каких пикселей считать. А в центре там вобще светлый оттенок.
Спасибо за ответы. Начал думать еще в одном направлении.=)
hatecows вне форума Ответить с цитированием
Старый 03.11.2010, 01:35   #6
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Вы можете поступить очень просто - выберите на Image, куда вы загрузили вашу картинку, "пограничную" точку (на свой взгляд), посмотрите, какие у нее соотношения между R,G,B и задайте их как условия поиска...
Где R будет больше или равно, а G и B меньше - это и будет ваш лазерный визир...
Другого пути нет - ваш мозг гораздо совершеннее любого, даже самого совершенного компьютера.
Можно, конечно, составить некую таблицу соответствий, но ведь это опять-таки вы ее создадите и научите компьютер использовать ее...
mihali4 вне форума Ответить с цитированием
Старый 03.11.2010, 08:24   #7
zumm
БохЪ
Форумчанин
 
Аватар для zumm
 
Регистрация: 30.09.2009
Сообщений: 724
По умолчанию

А как тогда быть если на картинке встречаются предметы еще более красные (R>;G<;B<) чем точка лазера? Нужно еще и знать ее примерную форму (круг), и последовательность цветов (в центре R<чем R краев). И то это не даст 100% вероятности что вы нашли именно вашу лазерную точку.
В планах порабощение вселенной...
zumm вне форума Ответить с цитированием
Старый 03.11.2010, 19:37   #8
hatecows
Пользователь
 
Регистрация: 09.06.2010
Сообщений: 11
По умолчанию

Вот кусок кода:

procedure TForm1.Button1Click(Sender: TObject);
var
x, y, i,j : integer;
begin

for I := 0 to Image1.Width - 1 do
for J := 0 to Image1.Height - 1 do
begin
if (GetRValue(Image1.Canvas.Pixels[i, j]) > 220) and
(GetGValue(Image1.Canvas.Pixels[i, j]) < 150) and
(GetBValue(Image1.Canvas.Pixels[i, j]) < 150) then

Image1.Canvas.Pixels[i, j] := RGB(GetRValue(Image1.Canvas.Pixels[i, j]), 0, 0)
else
Image1.Canvas.Pixels[i, j] := RGB(0, 0, 0);

end;
end;

В принципе самый простой фильтр. И очень даже нормально работает. Но в результате получается размытая красная область. Как мне тогда найти координаты центра этой обрасти (круга)?

У нас принято оформлять код специальным тэгом - при помощи кнопочки "#".
Только...
И не значком #.
И не РНР-кодом.
И не значком цитаты.
И не собственными "ручками".
Рекомендую. Помимо общих правил форума есть и дополнения к ним в каждом разделе...
Модератор
Изображения
Тип файла: bmp 1 блек.bmp (139.7 Кб, 136 просмотров)

Последний раз редактировалось mihali4; 03.11.2010 в 19:44.
hatecows вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Си найти минимальный путь от точки до точки dikr Помощь студентам 4 09.05.2010 11:58
Имеются координаты точки. Как проверить какого цвета соседние точки на форме? Rin Мультимедиа в Delphi 2 10.11.2009 22:47
даны две точки. организовать движение из точки А в точку Б окружности! Wi1D Помощь студентам 6 23.05.2009 19:55
Отбражение чисел - точки, это точки, а не запятые, обозначающие дробную часть Дикий Помощь студентам 7 12.05.2008 17:57
Цветной текст ERASERROR Общие вопросы Delphi 4 25.01.2008 21:04