我正在编写一个需要使用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端口。
有人知道问题可能是什么吗?我非常感谢所有的帮助。
答案 0 :(得分:0)
您需要在循环外只调用一次cvCaptureFromCAM(或cvCreateCameraCapture)来初始化和打开相机。然后,您可以通过每次调用cvQueryFrame来获取新帧。 (将cvCapture视为帧源,而不是帧本身。)
可能存在一些操作系统限制,您无法打开相机资源多次......这可能是您所描述的“仅10帧”的解释。