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

时间:2012-04-24 23:07:32

标签: qt video opencv qt-creator

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

但是当使用Qt-gui应用程序实时显示它们时,我无法管理。

程序从openfile对话框中获取视频的路径,并开始在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);
             }

1 个答案:

答案 0 :(得分:1)

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