在Qt GUI中显示图像序列?

时间:2014-05-25 01:15:29

标签: c++ qt opencv qtgui qt-signals

我有一个处理图像序列的OpenCV算法,我希望使用以下代码在Qt窗口中显示每个已处理的帧:

while(someCondition){
    Mat img;
    ... //some OpenCV process here
    QImage qimg = matToQImage (img); //a function I found
    ui->someLabel->setPixmap(QPixmap::fromImage(qimg));

    //I want to add a delay here or some wait condition
}

但只有最后一张图片显示在标签上。我认为这是因为循环太快而且GUI无法足够快地更新它。有没有办法让循环暂停以给GUI时间显示图像,然后仅在GUI显示图像时才继续?

1 个答案:

答案 0 :(得分:1)

根据您对我的评论问题的回复,这似乎是一个可以接受的解决方案:

    connect(timer, &QTimer::timeout, [=] () {
        Mat img;
        ... //some OpenCV process here
        QImage qimg = matToQImage (img); //a function I found
        ui->someLabel->setPixmap(QPixmap::fromImage(qimg));
    });
    timer->start(10);

由于它使用的是the new shiny signal-slot syntax for syntactic sugar,所以不要忘记将其添加到项目文件中:

CONFIG += c++11