在c++中将IplImage (OpenCV)保存在矢量上



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

CvCapture* capture = cvCaptureFromCAM(0);
IplImage *img = new IplImage(); 
vector<IplImage *> imgs;
while (true){
    cvGrabFrame(capture));
    img=cvRetrieveFrame(capture);
    imgs.push_back(img);
}

然后读取vector:

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

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

在代码的第一个比特中,您只分配一个图像指针,但随后检索所有图像并保存相同值的副本。

在第二部分中,为每个指针分配一个新映像,然后用数组

中的值覆盖该内存

你还应该了解一下openCV是如何管理内存的,它会自动为你做一些。

修改:

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

但是正如Martin所说,你应该在学习OpenCV之前学习c++,或者更好的是,学习python忘记c++吧:)

相关内容

  • 没有找到相关文章

最新更新