我在笔记本电脑上安装了OpenCV 2.1,并试图实现一个人脸检测程序。我在我的项目中使用罗技C210。我知道相机是可以的,因为软件检测并显示它,并在样本目录中启动facedetect.exe显示相机正在工作。但不知何故,当使用原来的facedetect.cpp代码在我的VS2010 Ultimate我甚至不能得到cvCaptureFromCAM工作!下面是我的代码:
#include "stdafx.h"
#include <iostream>
#include "cv.h"
#include "highgui.h"
using namespace std;
using namespace cv;
int main(int, char**) {
IplImage* frame;
// CvCapture* cap = cvCaptureFromCAM(-1);
// cvNamedWindow( "Example2_9", CV_WINDOW_AUTOSIZE );
CvCapture* capture;
cvWaitKey(20);
capture = cvCreateCameraCapture( -1 ); //yes, if 0 doesn't work try with -1
//assert( capture != NULL );
for(;;) {
frame = cvQueryFrame(capture);
if(frame == NULL)
return -1;
imshow("cap", frame);
if(waitKey(30) >= 0)
break;
}
}
好了,这不是真正的facedetect代码(它太长了),但它突出了这里的问题,它认为:
使用断点,我发现cvCaptureFromCAM之后的值捕获是0x000000。这不应该发生的,对吧?谁能告诉我发生了什么事?
尝试重复调用。请参考我的类似问题。如何避免"视频源"->捕捉source"OpenCV 2.3.0 - Visual c++ 2008中的选择
尝试升级到OpenCV 2.4.2。不是完全相同的问题(对我来说,使用v2.2.0时queryFrame()总是返回NULL),但现在它像魅力一样工作。可能只是兼容性问题