【问题标题】:Displaying image sequence in Qt GUI?在 Qt GUI 中显示图像序列?
【发布时间】:2014-05-25 01:15:29
【问题描述】:

我有一个处理图像序列的 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 显示图像时继续?

【问题讨论】:

  • 如果图像来得比 UI 更新快,你为什么要经常更新它?为什么你不放弃循环概念来支持信号和插槽,比如 QTimer 或在带有 drawImage() 和自己的信号发射的小部件子类中重新实现paintEvent?
  • 我在想我可以在只使用 OpenCV 时做类似的事情,我可以在每次迭代中调用 cv::imshow()cvWaitKey()。我实际上只是将循环重写为 QTimer 插槽,它现在可以工作了。

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


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-28
    相关资源
    最近更新 更多