在 OpenCV 中,设置曝光会导致我的网络摄像头软件无法自动调整曝光

In OpenCV, setting exposure causes my webcam software to not automatically adjust exposure

本文关键字:曝光 摄像头 软件 调整 网络 OpenCV 设置 我的      更新时间:2023-10-16

当我调用该方法cvSetCaptureProperty(capture, CV_CAP_PROP_EXPOSURE, 2);时,它会按应有的方式设置相机的曝光。但是,当我运行戴尔网络摄像头中央版软件、Skype 或其他任何使用相机的软件时,曝光卡在我在 OpenCV 程序代码中设置的最后一次曝光处,并且不会像以前那样自动调整。

如何让我的网络摄像头程序(戴尔网络摄像头中心和Skype)再次自动调整曝光?

代码如下:

#include "cv.h"
#include "highgui.h"
#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
    CvCapture* capture = cvCaptureFromCAM( CV_CAP_ANY ); //CV_CAP_ANY
    if ( !capture )
    {
        fprintf( stderr, "ERROR: capture is NULL n" );
        getchar();
        return -1;
    }
    cvNamedWindow( "mywindow", CV_WINDOW_AUTOSIZE );
    cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH, 640);
    cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT, 480);
    int width = (int)(cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH));
    int height = (int)(cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT));
    IplImage* image = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 3);
    IplImage* frame;
    char c;
    while ( true )
    {
        frame = cvQueryFrame( capture );
        if ( !frame ) 
        {
            fprintf( stderr, "ERROR: frame is null...n" );
            getchar();
            break;
        }
        cvShowImage( "mywindow", frame );
        cvSetCaptureProperty(capture, CV_CAP_PROP_EXPOSURE, 2);
        c = cvWaitKey(33);
        if( (c & 255) == 27 ) break;
    }
    cvReleaseCapture( &capture );
    cvDestroyWindow( "mywindow" );
    return 0;
}

OpenCV只是调用v4l1_ioctl()传递参数V4L2_CID_EXPOSURE

您必须深入研究 V4L2 文档才能弄清楚这一点。

顺便问一下,您是否尝试过在销毁窗口后传递CV_CAP_PROP_EXPOSURE的值0?这可能会解决问题。