首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用OpenCV逐帧读取视频文件

用OpenCV逐帧读取视频文件
EN

Stack Overflow用户
提问于 2017-08-19 16:53:48
回答 1查看 1.6K关注 0票数 0

我写了这些代码:

代码语言:javascript
复制
#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<<frame.empty()<<std::endl;时,它应该是0,因为视频被成功打开了,所以帧不应该是空的,但是结果是1,这意味着帧是空的,所以视频不能显示,为什么?你有什么解决方案吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-20 19:43:57

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

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45769615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档