我正在编写一个需要使用opencv从网络摄像头捕获的程序。我正在使用Logitech 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端口。

有人知道问题可能在哪里吗?我非常感谢所有帮助。

最佳答案

您只需在循环外调用cvCaptureFromCAM(或cvCreateCameraCapture)一次即可初始化并打开摄像机。然后,您只需每次调用​​cvQueryFrame即可获取新框架。 (将cvCapture视为框架源,而不是框架本身。)

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

10-06 15:43