C++ 如何在Qt框架中从视频中逐个获取帧?
我用QMediaPlayer获得了一个视频输入,然后我想一个接一个地读取帧,并用其他视觉算法处理所有帧。但我不知道如何从视频中一个接一个地获取帧,并访问帧的每个像素 在OpenCV库中,我可以很容易地用cv::VideoCapture和cv::Mat解决这个问题C++ 如何在Qt框架中从视频中逐个获取帧?,c++,qt,opencv,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
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.
如果有人已经处理过这种问题,请帮助我
非常感谢。您可以编写自己的实现并重写其 方法逐帧处理视频。 然后,您必须通过设置
QMediaPlayer
的视频输出
有关如何访问帧数据的详细信息,请参阅文档。您可以编写自己的实现并覆盖其 方法逐帧处理视频。 然后,您必须通过设置
QMediaPlayer
的视频输出
有关如何访问帧数据的详细信息,请参阅文档。建议:可以使用OpenCV。这将使播放视频和处理视频变得更容易,而无需QImage->Mat转换
为了使用OpenCV+Qt处理视频,必须创建一个连接到QTimer信号的QThread。QTimer信号每隔几毫秒向工作线程中的插槽发送一次信号,以从VideoCapture获取下一个视频帧并处理数据 建议:您可以使用OpenCV。这将使播放视频和处理视频变得更容易,而无需QImage->Mat转换
为了使用OpenCV+Qt处理视频,必须创建一个连接到QTimer信号的QThread。QTimer信号每隔几毫秒向工作线程中的插槽发送一次信号,以从VideoCapture获取下一个视频帧并处理数据 如果OpenCV对您有效,那么使用OpenCV没有问题当然:)如果OpenCV对您有效,那么使用OpenCV没有问题当然:)您不会得到
QImage
,但是原始数据,因此,可以将OpenCV代码插入重写的QAbstractVideoSurface::present
方法,并避免使用QTimer
。使用该方法,您不会得到QImage
,而是原始数据,因此可以将OpenCV代码插入重写的QAbstractVideoSurface::present
方法,并避免使用QTimer
。