如何从Qt框架中的视频中逐个获取帧?

时间:2017-04-06 09:03:34

标签: c++ qt opencv

我通过QMediaPlayer获得视频输入,然后我想逐个读取帧并使用其他视觉算法处理所有帧。但我不知道如何从视频中逐个获取帧并访问帧的每个像素......

在OpenCV库中,我很容易用cv :: VideoCapture和cv :: Mat来解决这个问题。

cv::VideoCapture capture(filename);
cv::Mat img;

capture >> img; // 'img' contains the first frame of the video.
capture >> img; // 'img' contains the second frame of the video.

如果有人已经处理过这类问题,请帮助我。

非常感谢。

2 个答案:

答案 0 :(得分:2)

You could write your own implementation of the QAbstractVideoSurface and override its present method to handle the video frame by frame. Then you will have to set the video output of the QMediaPlayer via setVideoOutput.

For details how to access the frame data you should consult the QVideoFrame documentation.

答案 1 :(得分:1)

建议:您可以使用OpenCV。如果没有QImage-> Mat转换,这将使播放视频和处理它们变得更容易。

要使用OpenCV + Qt处理视频,您必须创建连接到QTimer信号的QThread。 QTimer信号每隔几毫秒发出信号到工作线程中的一个插槽,从VideoCapture获取下一个视频帧并处理数据。