【问题标题】:Qt: Display Live Video, One Frame At A Time [duplicate]Qt:显示实时视频,一次一帧[重复]
【发布时间】:2015-04-08 05:44:39
【问题描述】:

我有一个经过分布式总线的解码视频帧。目前,我正在使用一个 QLabel,它通过Qt Signal/Slot 接收帧缓冲区并将其设置为像素图。

void VideoViewer::slot_update_view( unsigned char* frame, QSize size )
{
        QImage img( frame, size.width(), size.height(), QImage::Format_RGB888 );
        _label->setPixmap( QPixmap::fromImage( img ).scaledToWidth( width(), Qt::SmoothTransformation ) );
}

这行得通,但使用 QLabel 感觉很笨拙。有更好的解决方案吗?最后,我想在视频上作画。

【问题讨论】:

  • 您可以创建一个只绘制图像的小部件,可能使用 OpenGL(使用 Qt 很容易)来提高性能,如果需要缩放,还可以提高质量。

标签: c++ qt


【解决方案1】:

我想说,让它不那么“hacky”和更健壮的最好方法是使用一些低级图像类而不是指向缓冲区的原始指针。例如,您可以使用one in OpenCV 之类的表示形式。

使用普通缓冲区确实有风险,而且很难跟踪错误。

【讨论】:

  • 感谢您的回答罗曼。 char* 已被解码和检查。我真的只是对最好的显示方法感兴趣,最好在 Qt 中使用。
  • 是的,但它存在被破坏的风险。将所有图像属性封装在一个结构中似乎是一种更可靠的解决方案。
猜你喜欢
  • 2019-03-17
  • 2021-02-05
  • 2016-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多