OpenCV没有免费相机

时间:2014-04-08 23:17:36

标签: c++ opencv camera

我正试图在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时,它会失败并说相机正忙。

有什么想法吗?

1 个答案:

答案 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析构函数中自动取消初始化。

代码应足以解决问题。但正如你所注意到的那样,问题仍然存在,因此可能是两件事之一:

  • 这确实是OpenCV中的一个问题;
  • 相机的驱动程序存在错误,因此更新它可能会解决问题。