OpenCV指示摄像机访问会导致黑色图像,除非先前已从其他软件打开了摄像机

时间:2013-11-14 16:24:02

标签: opencv directshow

只有在演示应用程序打开了抓取器后才能通过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无法访问的某些设备设置,包括无效的标准设置(增益,曝光)。可以使用哪些较低级别的方法来查找/写入这些设置?

1 个答案:

答案 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 );
}