【问题标题】:Why opencv can open video but failed to retrieve frame from it?为什么opencv可以打开视频但无法从中检索帧?
【发布时间】:2013-02-05 04:39:27
【问题描述】:

我构建了带有 ffmpeg 支持的 opencv,这是我的代码的 sn-p,用于读取视频并遍历帧。

if (argc != 3) {
    std::cout<<"Usage: exe input_video_filename skip_frames \n"<<std::endl;
    return 0;
}
char* video_fn = argv[1];
int skip_frames = atoi(argv[2]);
VideoCapture cap;
if(!cap.open(video_fn))
{
    std::cout<<"error reading video"<<video_fn<<std::endl;
    return -1;
}
Mat frame,gray;
int i = 0;
double score = 0;
vector<double> scores;
while(true)
{
    if(!**cap.retrieve(frame)**)
    {
        std::cout<<"error retrieve frame"<<std::endl;
        break;
    }
    if(i%skip_frames)
    {
        cvtColor(frame,gray,CV_BGR2GRAY);
        double sc = compute_cpbdm(gray);
        std::cout<<sc<<std::endl;
        scores.push_back(sc);
    }

}

程序在 cap.open(video_fn) 行成功读取视频,但在 if(!cap.retrieve(frame)) 行从 VideoCapture 检索帧失败。我尝试了mp4和avi,但总是失败。有人遇到过类似的问题吗?如何解决?非常感谢!

【问题讨论】:

    标签: video opencv ffmpeg video-streaming computer-vision


    【解决方案1】:

    您使用的是capture.retrieve(frame),那么在此之前应该有一个capture.grab()

    或者,您可以这样做:capture.read(frame),它同时进行,

    或只是capture &gt;&gt; frame;(与阅读相同)

    【讨论】:

      猜你喜欢
      • 2012-01-14
      • 2013-05-06
      • 2013-11-05
      • 2017-10-19
      • 2015-09-11
      • 2014-11-11
      • 2021-08-28
      • 1970-01-01
      • 2021-03-22
      相关资源
      最近更新 更多