QPixmap白色显示问题

Posted

技术标签:

【中文标题】QPixmap白色显示问题【英文标题】:QPixmap white display issue 【发布时间】:2018-06-08 08:19:00 【问题描述】:

我正在尝试使用以下 python 代码在 Qt 上的 GraphicsView 小部件上显示 OpenCV 图像:

frame = self.frames[number]
height, width, channel = frame.shape
bytesPerLine = 3*width
qImg = QtGui.QImage(frame.data, width, height, bytesPerLine, QtGui.QImage.Format_RGB32)
self.scene.addPixmap(QPixmap(qImg))
self.graphicsView.setScene(self.scene)
self.graphicsView.show()

上面的代码将 GraphicsView Widget 上的图像显示为全白,或者根本不显示,因为 GraphicsView Widget 背景是白色的。

但是,当我从

更改以下代码时
qImg = QtGui.QImage(frame.data, width, height, bytesPerLine, QtGui.QImage.Format_RGB32)

qImg = QtGui.QImage(frame.data, width, height, bytesPerLine, QtGui.QImage.Format_RGB888),

图像显示在小部件上。但是,图像质量不是我需要的。

我必须以 RGB 质量显示我的图像,而不更改像素上的任何颜色值。可以通过以 RGB32 格式显示我的图像。我该如何处理?

最好的,

【问题讨论】:

你确定你的图片数据是RGB格式的吗?不是RGBA吗? 是的,我确定。它有 3 个维度。它适用于 RGB888 格式,但不适用于 RGB32。 你能用“图像质量不是我需要的”来说明你的意思吗?例如。原始图像的外观以及您的应用程序如何显示它。 【参考方案1】:

您用于QImage 的构造函数不会进行任何转换。因此format 参数必须与您的数据格式相匹配。您的数据是 24 位格式,因此您需要使用 QtGui.QImage.Format_RGB888

在任何情况下,32 位格式在质量上没有区别 - 它只是在每个 24 位值前面多了一个 0xff

没有其他格式代码可以工作。如果您有质量问题,您可能需要寻找其他地方。但是您可以使用convertToFormat 将图像转换为不同的格式。

【讨论】:

以上是关于QPixmap白色显示问题的主要内容,如果未能解决你的问题,请参考以下文章

QLabel 上的 QPixmap 无法正确显示

我怎样才能让 QLabel 与它显示的 QPixmap 的大小完全一致?

混淆QLabel和QPixmap

QT对话框打开图像并用QPixmap显示

qt QPixmap使用相对路径无法显示图像

如何正确地在手机上显示图片——QImage与QPixmap完全解析