3

メソッドを呼び出すとcvSetCaptureProperty(capture, CV_CAP_PROP_EXPOSURE, 2);、カメラの露出が適切に設定されます。ただし、Dell Webcam Central ソフトウェア、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;
}
4

1 に答える 1

0

OpenCV は単にv4l1_ioctl()引数を渡して呼び出すだけV4L2_CID_EXPOSUREです。

これを理解するには、 V4L2 ドキュメントを掘り下げる必要があります。

ところで、ウィンドウを破棄した後に値0を渡してみましたか? CV_CAP_PROP_EXPOSUREこれでうまくいくかもしれません。

于 2012-12-05T00:52:39.027 に答える