OpenCV cvCaptureFromCAM返回零

时间:2011-07-19 14:43:17

标签: c++ windows image-processing opencv camera

我的笔记本电脑上安装了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。这不应该发生,是吗?有人能告诉我发生了什么事吗?

2 个答案:

答案 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),但现在它就像一个魅力。 也许只是兼容性问题。