OpenCV:相机选择 - 奇怪的行为(2个相机)

时间:2011-07-26 11:20:03

标签: c++ opencv video-capture

我的系统中没有相机。我用这种方式初始化它们

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-infinity - 返回“绿色屏幕”的凸轮。

事先谢谢。

2 个答案:

答案 0 :(得分:0)

你看过stereo mode了吗?如果你想运行多个摄像头,它看起来是必需的。

答案 1 :(得分:0)

USB摄像头(至少通过windows上的directshow)可能有点困难。

有些事情要尝试:

// 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,......)