【问题标题】:Reading video file with OpenCV frame by frame用OpenCV逐帧读取视频文件
【发布时间】:2018-01-27 21:44:04
【问题描述】:

我已经写了这些代码:

#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>

using namespace std;

int main()
{
    cv::namedWindow( "Example 2-3", cv::WINDOW_AUTOSIZE );
    cv::VideoCapture cap;
    cap.open("/Testing/test.avi");
    if(cap.isOpened()==0)
    {
        cout<<"The video file cannot be opened."<<endl;
        return -1;
    }
    cv::Mat frame;
    cap >> frame;
    std::cout<<frame.empty()<<std::endl;  // I have a problem here: Why the result is 1?
    for(;;)
    {
        cap >> frame;
        if( frame.empty() ) break; // Ran out of film
        cv::imshow( "Example 2-3", frame );
        if( (char)cv::waitKey(33) >= 0 ) break;
    }
    return 0;
}

我正在尝试逐帧显示视频,当我通过cap.open打开视频时,它是成功打开的,但是当程序执行代码std::cout&lt;&lt;frame.empty()&lt;&lt;std::endl;时,它应该是0,因为视频成功打开,所以frame不应该是空的,但是结果是1,表示frame是空的,所以视频不能显示,为什么?你有什么解决办法吗?

【问题讨论】:

    标签: c++ opencv video


    【解决方案1】:

    在这种情况下,据我所知,您应该检查您的视频文件。另外,尝试调试以查看您的cap在打开文件后包含的内容,例如帧数或fps等。

    成功打开您的视频文件并不意味着您的文件是好的。有时您的视频文件损坏(下载时或解码时等)会导致某些帧可能为空。

    尝试另一个视频文件,看看它是否得到不同的结果。

    【讨论】:

      猜你喜欢
      • 2013-11-08
      • 1970-01-01
      • 2019-12-31
      • 2014-08-24
      • 1970-01-01
      • 2015-08-28
      • 2023-02-20
      • 2017-01-11
      • 1970-01-01
      相关资源
      最近更新 更多