2011-04-05 33 views
1

我儘量節省網絡攝像頭的一些幀中的OpenCV:保存的IplImage(OpenCV的)在C++中的矢量

CvCapture* capture = cvCaptureFromCAM(0); 
IplImage *img = new IplImage(); 
vector<IplImage *> imgs; 

while (true){ 
    cvGrabFrame(capture)); 
    img=cvRetrieveFrame(capture); 
    imgs.push_back(img); 
} 

再從讀向量:

cvNamedWindow("Caption",CV_WINDOW_AUTOSIZE); 

for(int i=0 ; i < imgs.size() ; i++){ 
    IplImage *img_col = new IplImage(); 
    img_col=imgs[i]; 
    cvShowImage("Caption" , img_col); 
} 

但呼應此錯誤:

OpenCV Error: Null pointer (The image has NULL data pointer) in cvGetMat 

回答

1

我認爲你需要學習記憶中的C++

是如何工作的

在第一位代碼中,您只分配一個圖像指針,但是將所有圖像檢索到並保存相同值的副本。

在第二部分,你分配一個新的圖像的每個指針,然後覆蓋與值這個存儲陣列中的

你也應該閱讀有關的OpenCV如何管理內存,它會自動做一些這方面你。

1

只要改變:

vector<IplImage> imgs; 
... 
img=cvRetrieveFrame(capture); 
textmgs.push_back(img); // A copy of the full matrix will be executed 

但正如馬丁說你應該學習C++的學習OpenCV的,或更好的之前,學習Python ,而忘記了C++ :)