我刚刚在一台新电脑上安装了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);
答案 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);