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

  • 本文关键字:获取 视频 Qt 框架 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.

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

多谢。

您可以编写自己的QAbstractVideoSurface实现并覆盖其 present逐帧处理视频的方法。然后,您将必须通过以下方式设置QMediaPlayer的视频输出 setVideoOutput .

有关如何访问帧数据的详细信息,请参阅QVideoFrame文档。

建议:你可以使用OpenCV。这将使播放视频和处理视频变得更容易,而无需QImage->Mat转换。

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

最新更新