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