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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.08.2009, 22:51   #1
toxich
Пользователь
 
Аватар для toxich
 
Регистрация: 09.05.2009
Сообщений: 83
По умолчанию Детектор движения

Хай всем. Пишу уже практически год видео детектор. По принципу обычного видео детектора происходит следующие- получение картинки с камеры изначально когда нет на объекте движения и закрепляется как за основу анализа, потом каждую секунду получается картинка с камеры для анализа ее с первой картинкой и если она отличается и на картинке замечен посторонний объект, то идут дальнейшие программные действия. Все это я приложил на картинке.
Вот только вопрос! Как можно разобрать картинку на мельчайшие числа чтобы сопоставить ее с первой картинкой с камеры? как это сделать я не знаю. Но знаю, что тема очень интересная. Кто знает помогите или наводите на мысль! ))
Изображения
Тип файла: jpg sxema.jpg (9.0 Кб, 298 просмотров)
toxich вне форума Ответить с цитированием
Старый 01.08.2009, 23:22   #2
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

Скорей всего, первую картинку загоняешь в массив,пиксельный, и хранишь как образец. Затем по таймеру (каждые N сек или мсек (не важно) считываешь картинку, опять же в пиксельный массив и сравниваешь с образцом.Не совпало - есть движение и обрабатывай его,
else ждем по таймеру. Вобщем то стандартный алгоритм. Реализация его - совсем другой вопрос. Тут больше технических проблем - перевести тот же сигнал с видеокамеры в удобный для программного обеспечения.
Почитал свое сообщение, подумал и вот еще - обычно видеонаблюдение с камер идет через DRW (кто сталкивался тот знает). Таких девайсов много, но все в принципе все равно пишутся на винт.Значит надо через API считывать в программу и ну и дальше обрабатывать.
Тут и Дельфи пашет и СИ.
Цитата:
Пишу уже практически год видео детектор
За год уж точно можно было бы че то нарыть.
И не сомневайся даже ... отдых - кайф, работа - лажа!

Последний раз редактировалось DeKot; 01.08.2009 в 23:32.
DeKot вне форума Ответить с цитированием
Старый 02.08.2009, 01:00   #3
toxich
Пользователь
 
Аватар для toxich
 
Регистрация: 09.05.2009
Сообщений: 83
По умолчанию

Цитата:
Сообщение от DeKot Посмотреть сообщение
Скорей всего, первую картинку загоняешь в массив,пиксельный, и хранишь как образец. Затем по таймеру (каждые N сек или мсек (не важно) считываешь картинку, опять же в пиксельный массив и сравниваешь с образцом.Не совпало - есть движение и обрабатывай его,
else ждем по таймеру. Вобщем то стандартный алгоритм. Реализация его - совсем другой вопрос. Тут больше технических проблем - перевести тот же сигнал с видеокамеры в удобный для программного обеспечения.
Почитал свое сообщение, подумал и вот еще - обычно видеонаблюдение с камер идет через DRW (кто сталкивался тот знает). Таких девайсов много, но все в принципе все равно пишутся на винт.Значит надо через API считывать в программу и ну и дальше обрабатывать.
Тут и Дельфи пашет и СИ.

За год уж точно можно было бы че то нарыть.
В том то и проблема, нарыл много чего. Но все не то. Понятно что там код на api идет. Вот только как реализовать перевод картинки в массив? И как тогда два массива сравнить ?
toxich вне форума Ответить с цитированием
Старый 02.08.2009, 01:36   #4
Noor
Участник клуба
 
Аватар для Noor
 
Регистрация: 01.11.2006
Сообщений: 1,051
По умолчанию

Этот код смотрели .... ???
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  b1, b2: TBitmap;
  c1, c2: PByte;
  x, y, i,
  different: Integer; // Counter for different pixels
begin
  b1 := Image1.Picture.Bitmap;
  b2 := Image2.Picture.Bitmap;
  Assert(b1.PixelFormat = b2.PixelFormat); // they have to be equal
  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
      for i := 0 to BytesPerPixel - 1 do // 1, to 4, dep. on pixelformat
      begin
        Inc(different, Integer(c1^ <> c2^));
        Inc(c1);
        Inc(c2);
      end;
  end;
end;
Noor вне форума Ответить с цитированием
Старый 02.08.2009, 10:19   #5
toxich
Пользователь
 
Аватар для toxich
 
Регистрация: 09.05.2009
Сообщений: 83
По умолчанию

как за основу то понятно, что ты хотел показать, но поверь как для обучения это мало. Процедура BytesPerPixel не указанна, так что мало чем помогает. Хотя всеровно за код спасибо!
toxich вне форума Ответить с цитированием
Старый 02.08.2009, 11:10   #6
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Цитата:
Сообщение от toxich Посмотреть сообщение
как за основу то понятно, что ты хотел показать, но поверь как для обучения это мало. Процедура BytesPerPixel не указанна, так что мало чем помогает. Хотя всеровно за код спасибо!
А зная PixelFormat вы не можете высчитать кол-во байт на пиксель ?
p.s. ну тогда понятно почему уже год делаите
BOBAH13 вне форума Ответить с цитированием
Старый 02.08.2009, 12:04   #7
toxich
Пользователь
 
Аватар для toxich
 
Регистрация: 09.05.2009
Сообщений: 83
По умолчанию

Цитата:
А зная PixelFormat вы не можете высчитать кол-во байт на пиксель ?
p.s. ну тогда понятно почему уже год делаите
Я обычно как делаю- бросаю, потом опять начинаю, потом опять бросаю. =) Сейчас сама задача это разложить BMP на числовой формат который был бы понятен языку программирование, а дальше уже просто сопоставить два варианта.
toxich вне форума Ответить с цитированием
Старый 02.08.2009, 12:26   #8
Levsha100
Заблокирован
Старожил
 
Регистрация: 20.07.2008
Сообщений: 4,032
По умолчанию

Я бы не брал одну картинку как образец. Можно брать две соседние.
Levsha100 вне форума Ответить с цитированием
Старый 02.08.2009, 12:47   #9
toxich
Пользователь
 
Аватар для toxich
 
Регистрация: 09.05.2009
Сообщений: 83
По умолчанию

Цитата:
Я бы не брал одну картинку как образец. Можно брать две соседние.
Поясни, а то что-то я не понял!
toxich вне форума Ответить с цитированием
Старый 02.08.2009, 12:50   #10
Levsha100
Заблокирован
Старожил
 
Регистрация: 20.07.2008
Сообщений: 4,032
По умолчанию

В написали
Цитата:
олучение картинки с камеры изначально когда нет на объекте движения и закрепляется как за основу анализа, потом каждую секунду получается картинка с камеры для анализа ее с первой картинкой
А я предлагаю сравнивать две следующие друг за другом(а не образец и текущая) картинки!
Levsha100 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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