C++ deque сбрасывает часть своей информации
Мне нужно использовать буфер, поэтому я решил использовать deque. Я отслеживаю несколько объектов в кадре и помещаю координаты и информацию гистограммы в массив треков размером 20. Для этого у меня есть класс с именем Tracker. trackarray - это объект Tracker, который содержит информацию об отслеживаемом объекте. Я пытаюсь скопировать эту информацию в буфер.
Вот как я определяю свой буфер и структуру:
std::deque<FRAMETRACKERARRAY> bufferTA;
typedef struct
{
Tracker TrackerArray[trackerSize];
} FRAMETRACKERARRAY;
Вот как я обновляю свой буфер:
if(uLastIndex > BUF_SIZE-1)
{
uLastIndex = 0;
}
memcpy(FrameTrackerArray[uLastIndex].TrackerArray, trackarray, sizeof(Tracker)*trackerSize);
for (int k = 0; k<trackarray[0].lastIndex; k++) {
if(trackarray[k].initial_height!=-1 && trackarray[k].initial_width!=-1 && trackarray[k].initialx!=-1 && trackarray[k].initialy!=-1) {
memcpy(&FrameTrackerArray[uLastIndex].TrackerArray[k].histogram, &trackarray[k].histogram, sizeof(trackarray[k].histogram));
}
}
uLastIndex++;
Вот как я добавляю массив в буфер:
bufferTA.pop_front();
bufferTA.push_back(FrameTrackerArray[uLastIndex]);
Я держу в буфере размер 10. С каждым кадром я помещаю текущий массив треков в деку и выскакиваю первый.
Класс Tracker выглядит так:
class Tracker
{
public:
Tracker();
~Tracker();
int initialx;
int initialy;
int initial_width;
int initial_height;
CvHistogram * histogram;
private:
IplImage *backproject;
}
Tracker::Tracker()
{
initialx=-1;
initialy=-1;
initial_width=-1;
initial_height=-1;
int hist_size[]={ybins,cbbins,crbins};
float y_ranges[]={0,255};
float cb_ranges[]={0,255};
float cr_ranges[]={0,255};
float* ranges[]={y_ranges,cb_ranges,cr_ranges};
histogram = cvCreateHist(3,hist_size,CV_HIST_ARRAY,ranges,1);
}
Tracker::~Tracker()
{
if(backproject) {
cvReleaseImage(&backproject);
}
cvReleaseHist(&histogram);
}
В первом кадре я инициализирую буфер с информацией отслеживаемого объекта в первом кадре. Это означает, что в первом буфере кадра все элементы одинаковы. Когда приходят новые кадры, буфер обновляется. Когда uLastIndex снова получает 0, а я использую pop_front(), вся информация гистограммы, хранящаяся в моем буфере, сбрасывается. Пока uLastIndex не получит 0, я могу без проблем использовать свой буфер. Как я могу решить эту проблему?
Спасибо.