2011-04-05 68 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++ :)