我目前正在开展相机捕捉项目。问题是,即使相机正确打开,有时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...
}
答案 0 :(得分:0)
我建议使用PickFirst
检查框架是否为黑色。
cv::countNonZero(InputArray src)