只有在演示应用程序打开了抓取器后才能通过OpenCV读取模拟帧抓取器的图像,否则会产生黑色图像。 以下调试代码
qDebug() << "Brightness" << cap->get(CV_CAP_PROP_BRIGHTNESS);
qDebug() << "Contrast " << cap->get(CV_CAP_PROP_CONTRAST);
qDebug() << "Saturation" << cap->get(CV_CAP_PROP_SATURATION);
qDebug() << "Hue " << cap->get(CV_CAP_PROP_HUE);
qDebug() << "Gain " << cap->get(CV_CAP_PROP_GAIN);
qDebug() << "Exposure " << cap->get(CV_CAP_PROP_EXPOSURE);
qDebug() << "Width " << cap->get(CV_CAP_PROP_FRAME_WIDTH);
qDebug() << "Height " << cap->get(CV_CAP_PROP_FRAME_HEIGHT);
输出
Brightness 5000
Contrast 5000
Saturation 4000
Hue 5000
Gain -8.58993e+08
Exposure -1
Width 720
Height 576
当然这些设置似乎有缺陷,但在抓取器的演示应用程序访问设备后成功打开设备时它们是相同的。
我认为这是一个驱动程序问题,需要OpenCV无法访问的某些设备设置,包括无效的标准设置(增益,曝光)。可以使用哪些较低级别的方法来查找/写入这些设置?
答案 0 :(得分:-1)
似乎相机实际上还没有加载,OpenCV已经尝试拍摄图像。 对我来说,查询几帧以上通常会有所帮助,如下所示:
CvCapture* capture = cvCaptureFromCAM( CV_CAP_ANY );
if ( capture ) {
IplImage* frame = cvQueryFrame( capture );
for (int i = 0; i < `0; i++)
{
frame = cvQueryFrame(capture);
}
cvSaveImage("mypic.jpg",frame);
cvReleaseCapture( &capture );
}