【发布时间】:2020-02-13 05:25:53
【问题描述】:
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout
from PyQt5.QtGui import QPixmap, QImage
import numpy as np
import sys
def print_np():
app = QApplication(sys.argv)
win = QWidget()
label = QLabel()
img = np.ones((500, 500))
qImg = QPixmap(QImage(img.data, img.shape[0], img.shape[1], QImage.Format_Indexed8))
label.setPixmap(qImg)
vbox = QVBoxLayout()
vbox.addWidget(label)
win.setLayout(vbox)
win.show()
sys.exit(app.exec_())
在这段代码中,我试图在 QtWindow 上显示 2d np 数组。
我期待看到一个白色方块,但我一直得到一个奇怪的显示,如下所示。
我相信这是因为 QImage.Format(数据类型)错误,所以我尝试了所有选项但没有帮助。
https://srinikom.github.io/pyside-docs/PySide/QtGui/QImage.html#PySide.QtGui.QImage
我应该先将 np 数组更改为 jpg 还是 png,作为文档中的示例?
【问题讨论】:
-
为什么要删除
#import语句?它使您的代码无法运行,因此更难为您提供帮助。 -
您希望在图像中显示颜色吗?如果是这样,它的形状必须是
500,500,3以容纳 3 个 RGB 通道并具有 RGB888 类型。如果你只想要黑色/白色/灰色,你的形状是正确的,但你需要告诉 Qt 是灰度的。 -
您的数组是 float64,当您需要 int8 时:
img = np.ones((500, 500), dtype=dtype=np.uint8)。也许你还想要 RGB 版本img = np.ones((3, 500, 500) ... -
` img = np.zeros((500, 500, 3), dtype=np.uint8) qImg = QPixmap( QImage(img.data, img.shape[0], img.shape[ 1], QImage.Format_RGB888)) label.setPixmap(qImg) ` np.zeros 和 one 都给我一个黑色图像。你能解释一下原因吗?