qt - 如何通过 Qt gui 应用程序显示视频的帧?

标签 qt video opencv qt-creator

我正在尝试通过 OpenCV 库的方法播放其帧来处理视频,并使用 opencv/highgui 的 imshow 方法显示这些帧,这里没有问题。

但是当涉及到使用 Qt-gui 应用程序实时显示它们时,我无法做到。

程序从打开文件对话框中获取视频的路径,并开始在 while 循环中抓取视频帧并进行处理。在处理步骤之后,当我尝试在 QLabel 上显示这些处理过的帧时,gui-app 的 QLabel 不显示任何内容(沿着视频的长度),只显示视频末尾的最后一帧,没有别的。我尝试刷新/更新每一帧的标签,但没有成功。

我想念什么事吗?或者有什么更方便的方法吗?

我的代码的必要部分如下。提前致谢。

bool stop=false;
cv::VideoCapture capture("a.avi");
cv::Mat cur_frame;

while (!stop) {    
             //...               
             capture.read(cur_frame);                
             //process steps..               
             QImage img= QImage((const unsigned char*)(cur_frame.data),
                                 cur_frame.cols,cur_frame.rows,
                                 QImage::Format_RGB888);
             ui->label->setPixmap(QPixmap::fromImage(img));
             // resize the label to fit the image
             ui->label->resize(ui->label->pixmap()->size());
             //...
             cv::waitkey(50);
             }

最佳答案

Qt 只能在控制返回到事件循环时更新 UI。您可以尝试在循环中调用 qApp->processEvents(),但这可能不是最佳方法。

关于qt - 如何通过 Qt gui 应用程序显示视频的帧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10307245/

相关文章:

c++ - Qt:单实例应用保护的最佳实践

c++ - OpenCV haarcascade_frontalface 检测区域

android - Android 上的简单标记检测(不是传统的增强现实),可能使用 OpenCV

c++ - 如何使用 OpenCV 检测图像梯度或法线

c++ - Qt 5.4,数据库打不开报错

c++ - 将原始像素数据转换为 QPixmap

php - 将 XSLT 1.0 转换为 XSLT 2.0

javascript - 在 Javascript 中判断视频是否加载

ios - ios中的视频录制问题

c++ - HEVC CU 级别分析