My favorites | Sign in
Project Home Wiki Issues Source
READ-ONLY: This project has been archived. For more information see this post.
Search
for
  Advanced search   Search tips   Subscriptions
Issue 6: О циклической очереди
1 person starred this issue and may be notified of changes. Back to list
Status:  Accepted
Owner:  lart...@gmail.com


 
Reported by lart...@gmail.com, Sep 21, 2011
итак, есть массив фреймов, который будет использоваться для обновления фона. будет глобальной переменной

IplImage** BGFrames;

перед тем как обновлять фон нужно обновить очередь - удалить самый старый фрейм и на его место записать новенький.
теперь, когда вызываем функцию 
IplImage* UpdateBGModel(const IplImage** src, const int n, double* const w)
нужно чтобы src указывал на первый *допустим* старый кадр.

массив #  #  #  #  #  #  #  #  #  #  #  #  #  #  #  #
       ^					         ^  ^
       ^                             ^  ^
	   BGFrames     [самый новый кадр]  [самый старый OldFramePosition]
	   
при вызове функции тогда передаем BGFrames+OldFramePosition
а внутри функции делаем так scr[(i+OldFramePosition)%n]

только вот проблемка - деление вообщето долгая операция.

другой вариант - список. тогда чтобы переписать там файл нужно перебить 3 указателя.
думаю, список проще и лучше. 
жду коментов.

Sep 21, 2011
#1 lart...@gmail.com
табы сьехали. как обычно.
Sep 22, 2011
#2 kainov.o...@gmail.com
>будет глобальной переменной
точно?

Мне кажется, вполне логичным вариантом будет просто циклически записывать и передавать указатель на начало массива + номер "настоящего" первого элемента.
И никаких делений вроде не надо, только немного сравнений.
+ Зачем прямо удалять старый кадр? Перезаписываем и все.
Sep 22, 2011
#3 lart...@gmail.com
>И никаких делений вроде не надо, только немного сравнений.
напиши,как
>Зачем прямо удалять старый кадр? Перезаписываем и все.
да, перебиваем указатели, "удалить" не в прямом смысле
Sep 23, 2011
#4 kainov.o...@gmail.com
У меня в OpenCV.cpp написан кусок записи картинок в буфер, можно найти по строчке nFirst=tor(nFirst+1,N);
Sep 25, 2011
Project Member #5 valentin...@gmail.com
Насколько я понимаю, старые кадры в любом случае придется удалять, в противном случае, получим утечки памяти. Мы же не просто перебиваем указатели, а выделяем память под кадр видео (по факту новое изображение) при получении очередного кадра.
Sep 25, 2011
#6 kainov.o...@gmail.com
Если мы используем табличку, то мы ее один раз создаем в начале работы программы и в конце удаляем. В процессе работы же никаких выделений памяти нету.
Sep 25, 2011
#7 lart...@gmail.com
какую табличку?
Sep 26, 2011
#8 kainov.o...@gmail.com
Таблица == двумерный массив :)
Sep 26, 2011
Project Member #9 valentin...@gmail.com
Ребят, думаю, что пора перенести обсуждение, например, в скайп или вынести на собрание, потому что я тоже не понимаю, откуда берется эта табличка.

Powered by Google Project Hosting