2011-03-03 117 views
1

我正在写一个程序,需要使用opencv从网络摄像头捕捉。我正在使用罗技C260相机和OpenCV2.2,Windows XP,QT Creator。下面是一个例子一块我的代码:OpenCV2.2 cvCaptureFromCAM问题...只返回绿色屏幕。 (罗技C260相机)

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。我试着改变这个函数的参数。我试过所有的USB端口。

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

回答

0

你需要调用cvCaptureFromCAM(或cvCreateCameraCapture)只有一次,循环外,初始化并打开摄像头。然后你可以通过每次简单地调用cvQueryFrame来获得新的框架。 (将cvCapture视为帧源,而不是帧本身。)

可能有一些操作系统限制,您无法打开相机资源超过几次......这可能是解释你描述的“仅10帧”。