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