在C ++中的向量上保存IplImage(OpenCV)

时间:2011-04-05 18:01:16

标签: vector opencv

我尝试在OpenCV中保存一些网络摄像头:

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

2 个答案:

答案 0 :(得分:1)

我认为你需要了解内存在c ++中是如何工作的

在第一段代码中,您只分配一个图像指针,然后将所有图像检索到并保存相同值的副本。

在第二部分中,为每个指针分配一个新图像,然后用数组中的值覆盖此内存

你还应该阅读openCV如何管理内存,它会自动为你做一些。

答案 1 :(得分:1)

只需改变:

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

但正如马丁所说,你应该在学习OpenCV之前学习C ++,或者更好,学习python 忘了C ++:)

相关问题