如何使用opencv和eclipse从视频剪辑中获取单帧

Posted

技术标签:

【中文标题】如何使用opencv和eclipse从视频剪辑中获取单帧【英文标题】:how to get a single frame from a video clip using opencv and eclipse 【发布时间】:2013-08-30 15:29:22 【问题描述】:
#include <iostream>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/core/core.hpp>

using namespace std;
using namespace cv;

int main(int argc, const char* argv[]) 

VideoCapture cap(0);
if(!cap.isOpened())
        
            cout<<"can't open video file"<<endl;
            return -1;
        
namedWindow("Myvideo",CV_WINDOW_AUTOSIZE);
while(1)

    Mat frame;
    bool bsuccess=cap.read(frame);
    if(!bsuccess)
    
        cout<<"can't read a frame"<<endl;
        break;
    
    imshow("Myvideo",frame);
    if(waitKey(30)==27)
    
        cout<<"Esc key is pressed by the user"<<endl;
        break;
    

return 0;

上面的代码只是为了从相机捕捉视频。 但我想从这个视频中得到一张图像(即只有一帧)。有人可以告诉我如何做到这一点。我实际上试图删除while循环,这样我就可以只得到一个循环而不是一个接一个(即视频)。并且还去掉了“break”语句。

#include <iostream>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/core/core.hpp>`

using namespace std;
using namespace cv;

int main(int argc, const char* argv[]) 

VideoCapture cap(0);
if(!cap.isOpened())
        
            cout<<"can't open video file"<<endl;
            return -1;
        
namedWindow("Myvideo",CV_WINDOW_AUTOSIZE);

    Mat frame;
    cap.read(frame);
    imshow("Myvideo",frame);
    if(waitKey(30)==27)
    
        cout<<"Esc key is pressed by the user"<<endl;

    

return 0;

但不幸的是,它只是显示一个空白窗口。 任何人都可以帮助我...提前谢谢

【问题讨论】:

【参考方案1】:

第一个读取的帧通常(总是?)黑色/灰色,尝试显示下一帧 - 替换此代码

cap.read(frame);
imshow("Myvideo",frame);

用这个:

cap.read(frame);
cap.read(frame);
imshow("Myvideo",frame);

【讨论】:

@cyriel...这确实是一条智能信息...它有效...非常感谢。

以上是关于如何使用opencv和eclipse从视频剪辑中获取单帧的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 python 和 openCV 从 .yuv 视频文件 (YUV420) 中提取帧?

如何通过 OpenCV 和 Python 通过索引从视频中获取帧?

使用 opencv 和 pyaudio 从网络摄像头录制视频和音频

使用 OpenCV 和 Java 从 gif 帧中获取 Mats

从0-1轻松入门 OpenCV4

使用 Eclipse 从 OpenCV-3.1 读取时出错