Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OpenCV:相机选择-奇怪行为(2个相机)_C++_Opencv_Video Capture - Fatal编程技术网

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

C++ OpenCV:相机选择-奇怪行为(2个相机),c++,opencv,video-capture,C++,Opencv,Video Capture,我的系统里几乎没有摄像头。我用这种方式初始化它们 cap1 = cvCreateCameraCapture(0); cap2 = cvCreateCameraCapture(1); // or -1 但每次执行后,它们的行为都不同:它们一起工作,或者两者都工作,或者不工作,或者其中一个捕捉良好,而另一个显示绿色屏幕。有时系统会显示选择设备的对话框 以下是这部分源代码: CvCapture* cap2; CvCapture* cap1; printf("- Search

我的系统里几乎没有摄像头。我用这种方式初始化它们

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);
    ...
CvCapture*cap2;
CvCapture*cap1;
printf(“-搜索第一个cam:\n”);
对于(i;i
怎么了

1-9个凸轮为空;10个-第一个凸轮,11个无限-返回为“绿色屏幕”的凸轮

事先谢谢。

您看过了吗?如果您想运行多个摄像头,它似乎是必需的。

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

有些事情可以尝试:

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


恐怕现在不支持此常见问题解答中使用的API。(所有这些
cvcam…
函数)。
// call all the setup functiosn for camera0 before capturing camera1     
cap1 = cvCreateCameraCapture(0); 
cvGetCaptureProperty(cap1,......)
cap2 = cvCreateCameraCapture(1); 
cvGetCaptureProperty(cap2,......)