OpenCV:尝试获取相机输出时获取黑框

时间:2016-01-15 13:18:02

标签: c++ opencv camera webcam

我目前正在开展相机捕捉项目。问题是,即使相机正确打开,有时cap.read(frame)会返回一个黑框。经过一些测试后,我注意到了一个解决方法:在cap.open()解决问题后,将睡眠时间设置为1-2秒。没有睡眠,似乎cap.read()是在相机实际准备好捕获之前执行的。但它没有失败并返回false,而是抓住了一个黑框。另外,检查frame.empty()不起作用,因为帧不是空的,它只是全黑。

关于如何解决这个问题的任何想法,当然不需要在相机打开后睡一会儿?

  #include <opencv2/objdetect/objdetect.hpp>
  #include <opencv2/highgui/highgui.hpp>
  #include <opencv2/imgproc/imgproc.hpp>
  #include <Windows.h>

  // .......... previous not relevant code

    VideoCapture cap;
    cap.open(0); // open the default camera
    if (cap.isOpened()) // check if we succeeded
    {
      // Sleep(2000);
      Mat frame;
      while (!cap.read(frame))
      {
        MessageBoxA(0, "unable to read frame", "CamDll", 0);
      }
      // Process frame data...
    }

1 个答案:

答案 0 :(得分:0)

我建议使用PickFirst检查框架是否为黑色。

cv::countNonZero(InputArray src)