OpenCV2.2 cvCaptureFromCAM问题......只返回绿屏。 (罗技C260相机)

时间:2011-03-03 06:23:59

标签: c++ qt windows-xp opencv webcam

我正在编写一个需要使用opencv从网络摄像头捕获的程序。我使用的是罗技C260相机和OpenCV2.2,Windows XP,QT Creator。以下是我的代码示例:

int i = 0;

int arg = 0;
CvCapture *pCapturedImage = cvCaptureFromCAM(arg);

cvNamedWindow( "Example1", CV_WINDOW_AUTOSIZE );
IplImage* img1= cvQueryFrame(pCapturedImage);
IplImage* img2;
IplImage* merged;
int MAX_FRAMES = 10;
    for (int i = 0; i < MAX_FRAMES; i++){
    pCapturedImage = cvCaptureFromCAM(arg);
    if (!pCapturedImage){
        printf("Uh oh");
    }
    img1 = cvQueryFrame(pCapturedImage);

    printf("Query");
    cvShowImage( "Example1", img1 );
    cvWaitKey(0);
}
for (int i = 0; i < MAX_FRAMES; i++){
    printf("Enter");
    img2 = img1;
    pCapturedImage = cvCaptureFromCAM(arg);
    if (!pCapturedImage){
        printf("Uh oh");
    }else
    printf("Capture");
    img1 = cvQueryFrame(pCapturedImage);
    printf("Query");
    cvShowImage( "Example1", img1 );
    cvWaitKey(0);
    img1 = mergePhotos(img2, img1, i*25, i*25);
    printf("Merge");
    cvShowImage( "Example1", img1 );
    cvWaitKey(0);

}

虽然不行。我在前10次捕获中只得到了一个,然后在那之后,捕获变为空(我发布了一张图片,但我不被允许)。

我很难过。我尝试过cvCaptureFromCAM和cvCreateCameraCapture。我已经尝试将args更改为该函数。我已经尝试了所有USB端口。

有人知道问题可能是什么吗?我非常感谢所有的帮助。

1 个答案:

答案 0 :(得分:0)

您需要在循环外只调用一次cvCaptureFromCAM(或cvCreateCameraCapture)来初始化和打开相机。然后,您可以通过每次调用cvQueryFrame来获取新帧。 (将cvCapture视为帧源,而不是帧本身。)

可能存在一些操作系统限制,您无法打开相机资源多次......这可能是您所描述的“仅10帧”的解释。