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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.08.2009, 13:39   #11
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Levsha100, это - лучшее решение. Но... Ни одна камера не даст два одинаковых кадра подряд. Изъяны стекла, способ обработки данных, изменение освещения (не включения лампочки перед камерой, а отражение далекого света от стены). Все это даст изменение картинки. Тогда лучше сравнивать кадры подряд, но сравнивать не на 100% а на совпадения. к примеру если цвет пикселя(123,432) кадра 1 отличается от цвета пикселя(123,432) кадра 2 на определенное значение - то есть изменения. Это значение нужно искать опытным путем, в зависимости от модели камеры, локального освещения и т.п.
-------------------------------------------------------------------------------------------------------------------
Что-то вроде
Код:
Var
 CurrentColor,ControlColor:TColor;
 X,Y:Integer;
Begin
 For Y:=0 to 599 do
  For X:=0 to 799 do
   Begin
    ControlColor:=IMGControl.Canvas.Pixels[X,Y];
    CurrentColor:=IMGCurrent.Canvas.Pixels[X,Y];
    If ((Abs(ControlColor-CurrentColor)>0) And (Abs(ControlColor-CurrentColor)<$16)) Or
       ((Abs(ControlColor-CurrentColor)>$100) And (Abs(ControlColor-CurrentColor)<$1600)) Or
       ((Abs(ControlColor-CurrentColor)>$10000) And (Abs(ControlColor-CurrentColor)<$160000)) Then
       CautionRedAlert;
Не тестил, но должно работать
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ

Последний раз редактировалось Alex Cones; 02.08.2009 в 13:47.
Alex Cones вне форума Ответить с цитированием
Старый 02.08.2009, 14:31   #12
toxich
Пользователь
 
Аватар для toxich
 
Регистрация: 09.05.2009
Сообщений: 83
По умолчанию

А можете полный код показать или исходник повесить ? Просто очень надо!
toxich вне форума Ответить с цитированием
Старый 02.08.2009, 16:41   #13
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Цитата:
Не тестил, но должно работать
писал в браузере, НЕ в дельфи.
В принципе это и есть полный код.
У тя на форме должно быть:
IMGControl и IMGCurrent (Тип - TImage) Размер 800*600 (хотя не обязательно, лишь бы одинаковый был).
Пишешь этот код на таймер с интервалом например в 1000. В изображения грузишь кадры.
Перед этим кодом в таймере нужно прописать, чтоб картинка из Current скопировалась в Control. А в Current - следующий кадр. Все. Теоретически должно работать.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 02.08.2009, 18:14   #14
toxich
Пользователь
 
Аватар для toxich
 
Регистрация: 09.05.2009
Сообщений: 83
По умолчанию

Спасибо! Блин старик выложи полный исходник! Пожалуйсто! Буду пипец как признателен!
toxich вне форума Ответить с цитированием
Старый 02.08.2009, 18:23   #15
Levsha100
Заблокирован
Старожил
 
Регистрация: 20.07.2008
Сообщений: 4,032
По умолчанию

Цитата:
Ни одна камера не даст два одинаковых кадра подряд.
Конечно! Но я говорил не об этом
Levsha100 вне форума Ответить с цитированием
Старый 02.08.2009, 18:31   #16
toxich
Пользователь
 
Аватар для toxich
 
Регистрация: 09.05.2009
Сообщений: 83
По умолчанию

а не! все спасибо! разобрался! спасибо старик! тебе большущий респект ))
toxich вне форума Ответить с цитированием
Старый 02.08.2009, 19:50   #17
toxich
Пользователь
 
Аватар для toxich
 
Регистрация: 09.05.2009
Сообщений: 83
По умолчанию

Были правы. Система с сопоставлением двух кадров плохо работает и особенно в условия уличного наблюдения.
Я нашел классный исходник который как раз то что мне надо, но он сцуко на VB вот он http://www.4shared.com/file/12240053...detect_vb.html
кто сможет перевести его на Delphi ? Это вообще супер будет !
toxich вне форума Ответить с цитированием
Старый 02.08.2009, 19:55   #18
Mr.Qwerty
Что? Где? Когда?
Форумчанин
 
Аватар для Mr.Qwerty
 
Регистрация: 14.07.2009
Сообщений: 220
По умолчанию

toxich,Были правы. Система с сопоставлением двух кадров плохо работает и особенно в условия уличного наблюдения.
Я нашел классный исходник который как раз то что мне надо, но он сцуко на VB вот он http://www.4shared.com/file/12240053...detect_vb.html
кто сможет перевести его на Delphi ? Это вообще супер будет ! - мне кажется с этим в Фриланс..
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили "Титаник".
Mr.Qwerty вне форума Ответить с цитированием
Старый 02.08.2009, 20:23   #19
toxich
Пользователь
 
Аватар для toxich
 
Регистрация: 09.05.2009
Сообщений: 83
По умолчанию

Цитата:
кто сможет перевести его на Delphi ? Это вообще супер будет ! - мне кажется с этим в Фриланс..
Бред! Может у кого есть подобные проги на делфи ?
toxich вне форума Ответить с цитированием
Старый 05.08.2009, 11:42   #20
Karabash
Форумчанин
 
Регистрация: 26.07.2009
Сообщений: 216
По умолчанию

Приведенная в сообщении 4 процедура, показывающая насколько отличаются две картинки несколько устарела.
Ниже переработанная процедура, учитывающая современные реалии Дельфи и работающая очень быстро (на моей машинке сравнение двух изображений 430х310 занимает около 10-30 мсек).
Код:
var
  x,y : Integer;
  b1, b2: TBitmap;
  c1, c2: PByteArray;
  different: Integer;
begin
  b1 := Image1.Picture.Bitmap;
  b2 := Image2.Picture.Bitmap;
  different := 0;
  for y := 0 to b1.Height - 1 do begin
    c1 := b1.Scanline[y];
    c2 := b2.Scanline[y];
    for x := 0 to b1.Width - 1 do begin
      Inc(different, Integer(c1[x] <> c2[x]));
    end;
  end;
  //вывод процента различия между двумя изображения
  Label1.Caption := FloatToStr((different / (b1.Width*b1.Height))*100);
end;
Процедура выясняет сколько байт одного изображения отличаются от байт другого (значение переменной different).

При сравнении двух изображений с камеры необходимо учитывать одно очень важное техническое обстоятельство, которое влияет на конечный результат сравнения.
Все цифровые камер имеют так называемый шум, из-за которого два даже идущих следом изображения с камеры не могут быть абсолютно одинаковыми. Чем качество камеры (матрицы) ниже, тем больше зашумленность изображения
Поэтому после получения от процедуры значения количества отличающих байт необходимо знать их долю в общем массиве байт сравниваемых изображений.
Если, допустим, две картинки отличаются на 5-10 %, совсем не факт что перед камерой пробежала кошка.
Для каждого экземпляра камеры, видимо, надо устанавливать свое соотношение в различие соседних кадров, чтобы гарантированно отсекать шум матрицы, но и не пропустить появление человека (птицы, страшного зверя и пр. объектов).
Karabash вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
траэктория движения profan_Artem Общие вопросы C/C++ 2 02.07.2011 15:19
Расчет движения voodoomedved Gamedev - cоздание игр: Unity, OpenGL, DirectX 5 25.02.2009 23:07
Детектор движения LARSn Помощь студентам 4 30.01.2009 14:04
Детектор движения LARSn Помощь студентам 3 30.01.2009 08:02
Имитация движения Napster Паскаль, Turbo Pascal, PascalABC.NET 0 20.01.2009 19:19