2013-11-21 27 views
0

我從網絡攝像頭抓取幀,並在窗口上顯示它們。爲了做一個時間分析,當我抓住它們時,我將這些幀保持在一個矢量上。 爲了測試它,當我的矢量大小達到100時,我嘗試直觀地看到目前爲止存儲的所有幀。C++(和openCV):在向量中積累一些墊子<Mat>

奇怪的是,實際上矢量裏面有100幀,但它們都是一樣的,並對應於捕捉到的最後一幀。

代碼:

Mat frame;  

    _cap.start(0); //VideoCapture object 

    vector<Mat> seq; 
    while(1) 
    { 
     _cap.getFrame(frame);   

     seq.push_back(frame); 

     imshow("a", seq[0]); 

     if (seq.size() == 100) 
     { 
      for (int n = 0; n < seq.size(); n++) 
      { 
       cout << "I'm in" << endl; 
       imshow("b", seq[n]); 
       waitKey(0); 
      } 
     } 

      waitKey(30); 
    } 

回答

3

的墊的,你從VideoCapture得到所有指向同一個驅動器的存儲器。

Mat a = b;不淺拷貝(相同像素指針)

,所以你需要:

seq.push_back(frame.clone()); 

這裏(即深層副本)

0

框架仍將指向同一個數據字段。因此,無論您何時抓取新圖像,所有先前捕獲的圖像也會更新。

解決方法是通過調用frame.release()

將其放入載體後釋放幀