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, я могу без проблем использовать свой буфер. Как я могу решить эту проблему?

Спасибо.

0 ответов

Другие вопросы по тегам