【问题标题】:Why OpenCV's `cvCreateCameraCapture` and `cvCreateFileCapture` do not work?为什么 OpenCV 的 `cvCreateCameraCapture` 和 `cvCreateFileCapture` 不起作用?
【发布时间】:2010-12-31 13:28:16
【问题描述】:

有一个 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" );
}

【问题讨论】:

  • 只是一个预感:尝试为相机使用索引 0。还要检查您的相机是否已正确安装(您可以从应用程序中使用它吗?)并且当前没有其他应用程序正在使用该相机。
  • 已经找到解决方案。似乎第一帧没有显示,所以if( !frame ) break; 在开始之前终止了视频的观看。但是这个问题仍然与从文件中检索视频有关。

标签: c++ video opencv webcam video-capture


【解决方案1】:

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

opencv_ffmpeg200d.dll

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

【讨论】:

  • 我下载了预编译的 OpenCV2.4.2 并且没有包含这个调试文件。 opencv_ffmpef242.dll 来了。问题是我(还)无法构建我的库,因为我的硬盘驱动器中没有可用空间......
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2013-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多