我正试图在OpenCV中释放相机并再次重新初始化,但问题是,我无法正确释放相机。询问OpenCV,cv :: VideoCapture,无论相机是否打开,它都说已关闭,但是小LED仍在发光,我不能在同一台相机周围创建另一个VideoCapture对象。
这是我使用的包含:
#include <opencv2/opencv.hpp>
这是一个显示问题的代码示例:
cv::VideoCapture cap(0);
for(int i = 0; i < 20; i++) {
cv::Mat frame;
cap >> frame;
cv::imshow("Test", frame);
if (cv::waitKey(30) >= 0) { break; }
}
cap.release();
std::cout << "Camera is closed is : " << !cap.isOpened() << std::endl;
while(true) {
if (cv::waitKey(30) >= 0) { break; }
}
如前所述,输出显示相机已关闭,但LED发光。当我尝试在相机周围创建一个新的VideoCapture时,它会失败并说相机正忙。
有什么想法吗?
答案 0 :(得分:0)
这可能是OpenCV 2.4.8与某些设备的错误,您应该检查他们的错误跟踪器并在那里发布此问题。
可以通过将变量cap
放在另一个范围内来解决此问题:
{
cv::VideoCapture cap(0);
for(int i = 0; i < 20; i++) {
cv::Mat frame;
cap >> frame;
cv::imshow("Test", frame);
if (cv::waitKey(30) >= 0)
break;
}
}
/* At this point, cap was destroyed and your camera should be operational again */
{
cv::VideoCapture cap(0);
for(int i = 0; i < 20; i++) {
cv::Mat frame;
cap >> frame;
cv::imshow("AnotherTest", frame);
if (cv::waitKey(30) >= 0)
break;
}
}
文档说明摄像机将在VideoCapture析构函数中自动取消初始化。
代码应足以解决问题。但正如你所注意到的那样,问题仍然存在,因此可能是两件事之一: