为什么OpenCV的`cvCreateCameraCapture`和`cvCreateFileCapture`不起作用?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么OpenCV的`cvCreateCameraCapture`和`cvCreateFileCapture`不起作用?相关的知识,希望对你有一定的参考价值。

有一个AVI视频和网络摄像头。 cvQueryFrame在两种情况下都返回null。代码适用(仅适用于cam):

#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" );
}
答案

通过步入openCV代码,我发现我需要确保它们在运行时在当前工作目录中存在ffmpeg dll:

opencv_ffmpeg200d.dll

如果找不到这个dll,OpenCV不会发出任何警告,而是捕获create调用只返回NULL。

心连心

SI

另一答案

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

以上是关于为什么OpenCV的`cvCreateCameraCapture`和`cvCreateFileCapture`不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

opencv 用到哪些头文件

opencv调用摄像头函数

你可以用OpenCV来干什么

为什么OpenCV已经发布V4版本了,使用时却用cv2 ?

为什么OpenCV已经发布V4版本了,使用时却用cv2 ?

opencv开源库