【发布时间】: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