当我调用方法cvSetCaptureProperty(capture, CV_CAP_PROP_EXPOSURE, 2);
时,它会设置相机的曝光。但是,当我运行戴尔网络摄像头中央软件,Skype或其他任何使用我的相机的设备时,曝光会在我在OpenCV程序代码中设置的最后一次曝光时停留,并且它不会像它具有的那样自动调整之前完成的。
如何让我的网络摄像头程序(Dell Webcam Central和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;
}
答案 0 :(得分:0)
OpenCV只调用v4l1_ioctl()
传递参数V4L2_CID_EXPOSURE
。
你必须深入研究V4L2 docs以便能够解决这个问题。
顺便说一下,在你破坏窗口后,你试过为0
传递值CV_CAP_PROP_EXPOSURE
吗?这可能会成功。