我尝试在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++吧:)