PyQt5将2d np数组转换为QImage

时间:2020-02-13 05:25:53

标签: numpy pyqt5 qt5

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吗?

enter image description here

1 个答案:

答案 0 :(得分:2)

有两个问题:

  • 创建Numpy图像数组时,您的 $query = "LOAD DATA INFILE '$filePath' INTO TABLE {$this->Table} FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\n'"; 必须为dtype
  • 您的np.uint8必须为format
  • 您的像素需要大于QImage.Format_RGB8880才能显示,整个范围为0..255

因此,请牢记:

1

enter image description here

++(将2D图像转换为黑白)

#!/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()

它将创建一个窗口

enter image description here

关键字:Python,Qt,QImage,QPixmap,图像处理。