2013-01-14 14 views
1

我想用opencv編寫一個函數,它讀取一個視頻文件抓取單幀並將它們存儲在std :: vector>中。在函數結束時問題出現了,我得到了向量向量中的圖像,但是當發佈VideoCapture時,所有數據都消失了。如何在OpenCV中保留由VideoCapture提供的幀

vector<Mat>load_single_video(string path) 
{ 
    vector<Mat> one_video_vector; 
    Mat video_img; 
    VideoCapture Temp_video_capture(path); 
    Temp_video_capture.read(video_img); 
    while (!video_img.empty()) 
    {   
     one_video_vector.push_back(video_img);  
     Temp_video_capture.read(video_img); 
    } 

    Temp_video_capture.release(); 

    return one_video_vector; 
} 

回答

2

OpenCV documentation

注: OpenCV的1.x的功能cvRetrieveFramecv.RetrieveFrame回報 圖像存儲在視頻捕捉結構內。不允許 修改或釋放圖像!您可以使用 cvCloneImage()複製相框,然後對副本進行任何您想要的操作。

雖然我們使用新的OpenCV 2.x API,但VideoCapture::read()實際上是cvRetrieveFrame()的包裝。正如筆記所說,你必須複製框架。

one_video_vector.push_back(video_img.clone()); 
+0

解決方案與您所說的完全不一樣。但你的建議幫助了我。 –