C ++ deque重置了一些信息

时间:2012-04-19 19:48:16

标签: c++ image-processing buffer deque arraycopy

我需要使用缓冲区,所以我决定使用deque。我正在跟踪一个帧中的多个对象,我将坐标和直方图信息放入一个大小为20的trackarray。为此,我有一个名为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的缓冲区。每一帧,我将当前的trackarray推到deque并弹出第一个。

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 个答案:

没有答案
相关问题