OpenCV C API不允许相机释放和重新打开

时间:2014-09-15 17:55:22

标签: c++ c opencv ubuntu

我刚刚在一台新电脑上安装了Ubuntu 14.04和openCV 2.4.9。

我有一个工作代码,在某些时候关闭最后一个cvVideoCapture并打开另一个,可能有也可能没有不同的索引:

CvCapture* capture;
capture = cvCaptureFromCAM(1);

...

cvReleaseCapture(&capture);
capture = cvCaptureFromCAM(0);

此代码用于与Ubuntu 12.0.4和OpenCV 2.4完美配合。 (我不确定哪个版本,但它是一年前的旧版本)。现在它输出错误

HIGHGUI ERROR: V4L: device /dev/video0: Unable to open for READ ONLY

另一方面,与C ++ API的等价物有效:

VideoCapture cap;
cap.open(1);

...

cap.release();
cap.open(0);

2 个答案:

答案 0 :(得分:0)

您可以为每个打开的相机设备使用不同的名称。如下面的代码所示。试试这个。

 VideoCapture cap,cap1;
    cap.open(1);

    ...

    cap.release();
    cap1.open(0);

答案 1 :(得分:0)

经过一些实验后,我确信,cvRelease绝对不是用于释放CvCapture实例。我收到有关不同指针类型的编译器警告。也许你应该用一些额外的标志进行编译。您必须使用cvReleaseCapture(&capture),就像文档中所述。我不确定这是否是您问题的解决方案,也许您需要提供更多信息。

CvCapture* capture;
capture = cvCaptureFromCAM(1);

cvReleaseCapture(&capture);
capture = cvCaptureFromCAM(0);