ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |
[Delphi] Вебкамера, датчик движения |

08.10.2009, 22:40
|
|
Новичок
Регистрация: 06.08.2009
Сообщений: 14
Провел на форуме: 35508
Репутация:
3
|
|
[Delphi] Вебкамера, датчик движения
Пишу датчик движения под вебкамеру. Подскажите, какой общий алгоритм может быть при сравнении двух последних изображений с веб камеры, если нужно обвести движущийся элемент красный цветом (по периметру)?
При надобности могу выложить исходники.
Последний раз редактировалось iama; 08.10.2009 в 22:42..
|
|
|

09.10.2009, 10:03
|
|
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
вообще есть довольно интересный алгоритм. основанный на такой вещи:
ты сравниваеш 2 картинки. можно сразу загнуть в память их битмапы, и сравнивать память. Далее под размер битмапа можно выделить память и очистить ей. Если есть отклонение цветов больше допустимого, то в третью область памяти ставиш пометку что в этом месте изменилось.
В этоге в выделенной памяти можно будет наблюдать карту отклонений к примеру в Затем произвести так называемую очистку, т.е. удаление одиночно стоящих точек или маленьких групп точек.
Ну а потом пройдясь по горизонтали и вертикали на картинке, подсветить цветом места там где в выделенной памяти идет переход от черного к белому или от белого к черному. В этоге ты получиш обводку практически по контуру.
Ну или просто вычислить центры групп точек и обвести их овалом.
Это самый приметивный и самый простой в реализации алгоритм
|
|
|

09.10.2009, 17:47
|
|
Новичок
Регистрация: 06.08.2009
Сообщений: 14
Провел на форуме: 35508
Репутация:
3
|
|
обрабатываю два битмапа так -
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
d1:=GetTickCount;
bmp2.Assign(bmp1); SampleGrabber1.GetBitmap(bmp1); if bmp2.Empty then exit;
k := 0;
for i := 0 to bmp1.Height - 1 do begin
p1 := bmp1.ScanLine[i]; p2 := bmp2.ScanLine[i];
for j := 0 to bmp1.Width - 1 do begin
PriznakChange:=0;
if p1 = p2 then continue;
if (p1[j].r<>p2[j].r) and
(p1[j].b<>p2[j].b) and
(p1[j].g<>p2[j].g) then
k:=k+1;
end;
end;
Caption := 'Static';
if k > 307200 * StrToInt(edit1.Text) div 1000 then begin
bmp1.SaveToFile(FormatDateTime('hhnnss',Now)+'.bmp');
Caption := 'Move';
Application.ProcessMessages;
end; Caption := Caption + ' ' + IntToStr(k);
end;
Всё то работает хорошо, но такое чувство, что видеопоток опаздывает на 10-15 мсекунд. Изза чего это может быть? Частота обновления таймера - 100мс, процедура обработки занимает 20-30мс.
Последний раз редактировалось iama; 09.10.2009 в 17:52..
|
|
|

11.10.2009, 00:06
|
|
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
а ты посчитай сколько по времени вся процедура длится вместе с сохранением.
Засеки в начале и в конце время через GetTickCount
|
|
|

11.10.2009, 09:47
|
|
Новичок
Регистрация: 06.08.2009
Сообщений: 14
Провел на форуме: 35508
Репутация:
3
|
|
Я ж пишу, уже проверил.
|
|
|

11.10.2009, 10:21
|
|
Познающий
Регистрация: 28.01.2009
Сообщений: 90
Провел на форуме: 432613
Репутация:
80
|
|
1. частота обновления слишком низкая, попробуй поставь 1 мс в таймере
2. попробовать вот такую схему, в отдельном потоке
Код:
while true do begin
//.... обработчик
sleep(1);
end;
3. Возможно также, что слишком большой размер изображения сохраняется, попробуй сделать его чернобелым что то вроде, Bitmap.PixelFormat:=pf1bit;
|
|
|

11.10.2009, 12:02
|
|
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
А вообще есть вот такая вот хитрая вешь - библиотека OpenCV. Она вроде под С++ билдер, но скорее всего есть заточка и под делфи, потому что тоже на VCL сделан компонент.
Вот сайт там много по этой теме и алгоритмов для извлечения изображений.
http://www.smorodov.narod.ru/CompVision.htm
|
|
|
|
 |
Похожие темы
|
| Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
|
Литература Delphi
|
Sams |
С/С++, C#, Delphi, .NET, Asm |
2 |
19.03.2010 19:46 |
|
Скачать Delphi 7, помощь.
|
_casper_ |
С/С++, C#, Delphi, .NET, Asm |
20 |
08.12.2009 04:54 |
|
Books
|
PSalm69 |
Избранное |
248 |
27.10.2009 04:52 |
|
Virus.Win32.Induc.a – новый вирус для Delphi
|
ErrorNeo |
Уязвимости |
37 |
26.08.2009 00:33 |
|
Virus.Win32.Induc.a или "Снова записки новичка"
|
_=(mac)=_ |
Защита ОС: вирусы, антивирусы, файрволы. |
5 |
24.08.2009 23:34 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|