2010-01-01 59 views
1

有一个AVI videofile和一个摄像头。 cvQueryFrame在两种情况下均返回null。代码已应用(仅适用于凸轮):为什么OpenCV的`cvCreateCameraCapture`和`cvCreateFileCapture`不起作用?

#include "highgui.h" 
#include <iostream> 

using namespace std; 

int main(int argc, char** argv) 
{ 
    cvNamedWindow("KillCam", CV_WINDOW_AUTOSIZE); 
    cvWaitKey(0); 
    CvCapture* capture = cvCreateCameraCapture(-1); 
    assert(capture != NULL); 
    IplImage* frame; 

    while(1){ 
     frame = cvQueryFrame(capture); 
     if(!frame) break; 
     cvShowImage("KillCam", frame); 
     char c = cvWaitKey(33); 
     if(c == 30) break; 
    } 
    cvReleaseCapture(&capture); 
    cvDestroyWindow("KillCam"); 
} 
+0

只是一种预感:尝试使用索引0的相机。还要检查您的相机是否安装正确(您可以在应用程序中使用它吗?)并且目前没有其他应用程序正在使用相机。 – James 2010-01-02 12:14:34

+0

已经找到解决方案。看起来第一帧没有显示出来,所以if(!frame)break;'在视频开始前终止视频的观看。但这个问题仍然与从文件中检索视频有关。 – Ivan 2015-10-19 13:35:03

回答

0

检查视频格式。 OpenCV可以在它支持的编解码器中挑剔;例如,它不适用于Xvid。你可以找到支持的编解码上OpenCV wiki

3

我发现,通过步入OpenCV的代码清单,我需要确保fmpeg DLL存在于当前的工作目录在运行时:

opencv_ffmpeg200d.dll 

如果找不到这个DLL,OpenCV不会发出任何警告,相反,capture create调用只返回NULL。

心连心

+0

+1这是我的情况下的原因 – INS 2011-12-02 07:21:11

+0

我下载了预编译的OpenCV2.4.2,并且这个调试文件没有包括在内。 opencv_ffmpef242.dll来了。事情是,我无法建立我的图书馆(但),因为我没有在硬盘中的可用空间... – 2012-09-11 10:48:46