opencv关闭相机

时间:2011-08-16 10:33:19

标签: opencv c++-cli

好的我有这个代码

IplImage *frame;
CvCapture *capture = cvCaptureFromCAM(0);
frame = cvQueryFrame(capture);
cvSaveImage("sample.jpg",frame);
cvReleaseImage(&frame);

保存图像,但保存该图像后,我想释放该相机以便关闭。现在相机一直亮着,直到程序停止,我想在cvReleaseImage(&frame);

后完全关闭并关闭相机

我试过

  

cvReleaseCapture(安培;捕获)

但是它给了我一个运行时错误:the application has requested the Runtime to terminate in an unusual way和这个错误

  

OpenCV错误:错误的参数(无法识别或不支持的数组类型)   在未知功能,文件...... \ modules \ core \ src \ array.cpp,行   996

3 个答案:

答案 0 :(得分:3)

我不完全确定。但请尝试删除cvReleaseImage调用。

我记得cvQueryImage方法检索到的图像指针始终指向同一个地址。所以我的猜测是这个图像数据是由捕获管理的。所以当你释放捕获时释放它。

编辑:

在这里找到: http://opencv.jp/opencv-1.0.0_org/docs/ref/opencvref_highgui.htm

  

函数cvQueryFrame从相机或视频文件中抓取一个帧,   解压缩并返回它。这个功能只是一个组合   一次调用中的cvGrabFrame和cvRetrieveFrame。返回的图像应该   不得由用户发布或修改。

答案 1 :(得分:0)

尝试cvReleaseCapture()? (30个字符。)

答案 2 :(得分:0)

我认为您正在寻找的是cvReleaseCapture。这些代码对我有用:


int main (void) {

  IplImage *frame;
  CvCapture *capture = cvCaptureFromCAM(0);
  frame = cvQueryFrame(capture);
  cvSaveImage("sample.jpg",frame);
  cvReleaseImage(&frame);
  cvReleaseCapture( &capture );

  return 0;
}

IplImage *frame; CvCapture *capture = cvCaptureFromCAM(0); frame = cvQueryFrame(capture); cvSaveImage("sample.jpg",frame); cvReleaseImage(&frame); cvReleaseCapture( &capture ); return 0; }

这是一个非常简单的代码,但它应该正确终止,不会引起任何错误。