![]() |
[Delphi] Вебкамера, датчик движения
Пишу датчик движения под вебкамеру. Подскажите, какой общий алгоритм может быть при сравнении двух последних изображений с веб камеры, если нужно обвести движущийся элемент красный цветом (по периметру)?
При надобности могу выложить исходники. |
вообще есть довольно интересный алгоритм. основанный на такой вещи:
ты сравниваеш 2 картинки. можно сразу загнуть в память их битмапы, и сравнивать память. Далее под размер битмапа можно выделить память и очистить ей. Если есть отклонение цветов больше допустимого, то в третью область памяти ставиш пометку что в этом месте изменилось. В этоге в выделенной памяти можно будет наблюдать карту отклонений к примеру в Затем произвести так называемую очистку, т.е. удаление одиночно стоящих точек или маленьких групп точек. Ну а потом пройдясь по горизонтали и вертикали на картинке, подсветить цветом места там где в выделенной памяти идет переход от черного к белому или от белого к черному. В этоге ты получиш обводку практически по контуру. Ну или просто вычислить центры групп точек и обвести их овалом. Это самый приметивный и самый простой в реализации алгоритм |
обрабатываю два битмапа так -
Код:
procedure TForm1.Timer1Timer(Sender: TObject); |
а ты посчитай сколько по времени вся процедура длится вместе с сохранением.
Засеки в начале и в конце время через GetTickCount |
Я ж пишу, уже проверил.
|
1. частота обновления слишком низкая, попробуй поставь 1 мс в таймере
2. попробовать вот такую схему, в отдельном потоке Код:
while true do begin |
А вообще есть вот такая вот хитрая вешь - библиотека OpenCV. Она вроде под С++ билдер, но скорее всего есть заточка и под делфи, потому что тоже на VCL сделан компонент.
Вот сайт там много по этой теме и алгоритмов для извлечения изображений. http://www.smorodov.narod.ru/CompVision.htm |
| Время: 09:05 |