【问题标题】:Displaying live camera image in Qt GUI在 Qt GUI 中显示实时摄像机图像
【发布时间】:2014-05-24 19:21:46
【问题描述】:

我正在尝试制作一个应用程序,它可以拍摄由相机记录的实时图像并使用 Qt GUI 在屏幕上显示它。相机驱动程序和 api 为我提供了刷新指针显示的内存块的功能。 问题是我的图像不会在使用 Qimage 制作的 Qlabel 内刷新(代码如下)

QImage myImage(raw_image_data_pointer, 768, 576, QImage::Format_RGB32   );
QLabel myLabel;

myLabel.setPixmap(QPixmap::fromImage(myImage));
myLabel.show();

如何刷新我的 QLabel?

【问题讨论】:

  • 你试过showEvent/paintEvent/update吗?

标签: qt video refresh qimage qlabel


【解决方案1】:

问题是您创建了带有静态图像的标签小部件。包含的图像不再“连接”到您的相机,而只是视频流帧的副本。为了使QLabel 能够自我更新,您必须不断地用新的替换包含的图像。例如,您可以为此设置一个计时器:

MyClass:MyClass()
{
    QTimer *timer = new QTimer;
    connect(timer, SIGNAL(timeout()), this, SLOT(update()));
    timer->start(10); // Defines how often update the label.

    myLabel = new QLabel;
    [..]
}

// Slot
MyClass::update()
{
    QImage myImage(raw_image_data_pointer, 768, 576, QImage::Format_RGB32 );
    myLabel.setPixmap(QPixmap::fromImage(myImage));
}

【讨论】:

  • 感谢它完全有效。我尝试了类似的事情,但是使用 while 循环而不是来自计时器的信号,但是从读取的内容(并且也经历过)来看,while 循环阻塞 qt 事件循环存在问题。你能想到任何其他方式来刷新屏幕而不是“每 X 次”吗?
  • @MarcinKorn:请务必注意,您不会“每 X 次”刷新屏幕。屏幕刷新与您的标签“刷新”不同。除了捕获相机信号并在数据可用时触发更新之外,我想不出任何其他方法来解决这个问题,但这可能不会让渲染总是很忙。这取决于您如何获取这些相机图像等。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多