我的笔记本电脑上安装了OpenCV 2.1,正在尝试实施人脸检测程序。我正在将Logitech C210用于我的项目。我知道相机是可以的,因为软件会检测并显示它,并且在samples目录中启动facedetect.exe会显示相机正在工作。但不知何故,当我在VS2010 Ultimate中使用原始的facedetect.cpp代码时,我甚至无法使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。这不应该发生,是吗?有人能告诉我发生了什么事吗?
答案 0 :(得分:0)
尝试重复调用。请参阅我看似相似的问题。 How to avoid "Video Source -> Capture source" selection in OpenCV 2.3.0 - Visual C++ 2008
答案 1 :(得分:0)
尝试升级到OpenCV 2.4.2。不是完全相同的问题(对我来说,queryFrame()使用v2.2.0返回总是NULL),但现在它就像一个魅力。 也许只是兼容性问题。