【发布时间】:2014-11-09 07:52:33
【问题描述】:
我刚刚在一台新电脑上安装了 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);
【问题讨论】:
-
文档说“在 C API 中,当你完成视频处理后,使用
cvReleaseCapture(), ... 发布 CvCapture 结构”docs.opencv.org/modules/highgui/doc/… -
我会试一试并删除所有 cvReleaseCapture()
-
为什么要删除它们?正如文档所述,您应该将
cvReleaseCapture()用于CvCapture实例。也许cvRelease也应该有效,但文档对此并不清楚。 -
我查看了 opencv 源代码,但没有发现 2.4 和 2.4.9 之间的相关变化。但是从 2.4.9 到 3.0.0 发生了很大的变化。如果您在开头也使用
ID = 0打开相机,它是否有效,例如capture = cvCaptureFromCAM(0);在第二行?