Numpy PyQt5将2d np数组转换为QImage
在这段代码中,我试图在QtWindow上显示2d np数组 我期待看到一个白色的正方形,但我一直得到一个奇怪的显示如下 我相信这是因为错误的QImage.Format(数据类型),所以我尝试了每一个选项,但没有帮助 我是否应该首先将np数组更改为jpg或png,作为文档中的示例Numpy PyQt5将2d np数组转换为QImage,numpy,pyqt5,qt5,Numpy,Pyqt5,Qt5,在这段代码中,我试图在QtWindow上显示2d np数组 我期待看到一个白色的正方形,但我一直得到一个奇怪的显示如下 我相信这是因为错误的QImage.Format(数据类型),所以我尝试了每一个选项,但没有帮助 我是否应该首先将np数组更改为jpg或png,作为文档中的示例 有几个问题: 创建Numpy图像数组时,您的dtype需要是np.uint8 您的格式需要是QImage.format\u RGB888 您的像素需要大于0或1才能显示,整个范围为0..255 因此,考虑到这一点:
有几个问题:
- 创建Numpy图像数组时,您的
需要是dtype
np.uint8
- 您的
需要是格式
QImage.format\u RGB888
- 您的像素需要大于
或0
才能显示,整个范围为0..2551
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_())
++(将二维图像转换为黑白)
它将创建一个窗口
关键词:Python、Qt、QImage、QPixmap、图像处理。为什么删除了
#import
语句?它使你的代码无法运行,因此很难帮助你。你希望在你的图像中显示颜色吗?如果是这样,则其形状必须为500500,3
,以容纳3个RGB通道并具有RGB888类型。如果您只需要黑色/白色/灰色,那么您的形状是正确的,但是您需要告诉Qt是灰色的。当您需要int8时,您的数组是float64:img=np.ones((500500),dtype=dtype=np.uint8)
。也许您还需要RGB版本的img=np.one((3500500)..
`img=np.zeros((5005003),dtype=np.uint8)qImg=QPixmap(QImage(img.data,img.shape[0],img.shape[1],QImage.Format_RGB888))label.setPixmap(qImg)`np.0和1都给了我一个黑色图像。你能解释一下原因吗?@Sean而不是QImage.Format_Indexed8
,你可能应该使用QImage.Format_Grayscale8
来确定色调。我再次编辑了一遍,顺便说一句,非常感谢你的回答!很酷,还要感谢@Demi Lune祝你的项目好运,记住,ques回答(和答案)是免费的,所以如果你被卡住了,请回来。
#!/usr/bin/env python3
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout
from PyQt5.QtGui import QPixmap, QImage
import numpy as np
import sys
def main():
app = QApplication(sys.argv)
win = QWidget()
label = QLabel()
img = np.zeros((500, 500, 3), dtype=np.uint8)
# Turn up red channel to full scale
img[...,0] = 255
qImg = QPixmap(QImage(img.data, img.shape[0], img.shape[1], QImage.Format_RGB888))
label.setPixmap(qImg)
vbox = QVBoxLayout()
vbox.addWidget(label)
win.setLayout(vbox)
win.show()
sys.exit(app.exec_())
main()
img = np.zeros((500, 500), dtype=np.uint8)
img[250:, :] = 255
qImg = QPixmap(QImage(img.data, img.shape[0], img.shape[1], QImage.Format_Grayscale8))