OpenCV: выбор камеры - странное поведение (2 камеры) - PullRequest
0 голосов
/ 26 июля 2011

У меня мало камер в системе.Я инициализирую их таким образом

cap1 = cvCreateCameraCapture(0); 
cap2 = cvCreateCameraCapture(1); // or -1

Но после каждого выполнения их поведение отличается: они работают вместе или оба, или они не работают, или один из них хорошо снимает, а другой показывает зеленый экран.И иногда система показывает мне диалоговое окно для выбора устройства.

Вот эта часть исходного кода:

    CvCapture* cap2;
    CvCapture* cap1;
    printf("- Searching first cam : \n");

    for (i; i < LASTCAM; i++)
    {
        cap1 = cvCreateCameraCapture(i);
        if (!cap1)
        {
            printf("-- Camera %d is empty \n", i);
        }
        else
        {
            printf("-- Camera %d is OK \n", i);
            i++;
            break;
        }
    }
    printf("- Searching second cam : \n");
    for (; i < LASTCAM; i++)
    {
        cap2 = cvCreateCameraCapture(i);
        if (!cap2)
        {
            printf("-- Camera %d is empty \n", i);
        }
        else
        {
            printf("-- Camera %d is OK \n", i);
            break;
        }
    }        printf("Frame propeties:\n");
    double width = cvGetCaptureProperty(cap1, CV_CAP_PROP_FRAME_WIDTH);
    double height = cvGetCaptureProperty(cap1, CV_CAP_PROP_FRAME_HEIGHT);
    printf("First cam : %.0f x %.0f\n", width, height );

    double width2 = cvGetCaptureProperty(cap2, CV_CAP_PROP_FRAME_WIDTH);
    double height2 = cvGetCaptureProperty(cap2, CV_CAP_PROP_FRAME_HEIGHT);
    printf("Second cam : %.0f x %.0f\n\n", width2, height2 );

    IplImage* frame1=0;
    IplImage* frame2=0;

    cvNamedWindow("cam1", CV_WINDOW_AUTOSIZE);
    cvNamedWindow("cam2", CV_WINDOW_AUTOSIZE);

    int counter=0;
    char filename[512];

    while(true){
             frame1 = cvQueryFrame( cap1 );
            frame2 = cvQueryFrame( cap2 );
            cvShowImage("cam1", frame1);
            cvShowImage("cam2", frame2);
    ...

что с ним не так?

1-9 камерыпусто;10 - первая камера, 11-бесконечность - возвращает камеры, которые являются «зелеными экранами».

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 26 июля 2011

USB-камеры (по крайней мере, через DirectShow на Windows) может быть немного сложно.

Некоторые вещи, чтобы попробовать:

// A small delay between the captures 
cap1 = cvCreateCameraCapture(0); 
Sleep(100);
cap2 = cvCreateCameraCapture(1); 

или

// call all the setup functiosn for camera0 before capturing camera1     
cap1 = cvCreateCameraCapture(0); 
cvGetCaptureProperty(cap1,......)
cap2 = cvCreateCameraCapture(1); 
cvGetCaptureProperty(cap2,......)
0 голосов
/ 26 июля 2011

Вы смотрели на стерео режим ? Похоже, это необходимо, если вы хотите запустить несколько камер.

...