我正在编写一个需要使用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帧”的解释。