【发布时间】:2018-07-16 06:57:31
【问题描述】:
考虑以下代码
from PyQt5.QtWidgets import QMainWindow, QLabel, QSizePolicy, QApplication
from PyQt5.QtGui import QPixmap, QImage
from PyQt5.QtCore import Qt
import numpy as np
import sys
class Test(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(10,10,640, 400)
pixmap_label = QLabel()
pixmap_label.setSizePolicy(QSizePolicy.Ignored, QSizePolicy.Ignored)
pixmap_label.resize(640,400)
pixmap_label.setAlignment(Qt.AlignCenter)
im_np = np.ones((1800,2880,3),dtype=uint8)
im_np = np.transpose(im_np, (1,0,2))
qimage = QImage(im_np, im_np.shape[1], im_np.shape[0],
QImage.Format_RGB888)
pixmap = QPixmap(qimage)
pixmap = pixmap.scaled(640,400, Qt.KeepAspectRatio)
pixmap_label.setPixmap(pixmap)
self.setCentralWidget(pixmap_label)
self.show()
def main():
app = QApplication(sys.argv)
win = Test()
sys.exit(app.exec_())
if __name__=="__main__":
main()
我收到以下错误
TypeError:参数不匹配任何重载调用:QImage(): 参数太多 QImage(QSize, QImage.Format):参数 1 有 意外类型'numpy.ndarray' QImage(int,int,QImage.Format): 参数 1 具有意外类型 'numpy.ndarray' QImage(bytes, int, int, QImage.Format):参数 1 具有意外类型“numpy.ndarray”
QImage(sip.voidptr, int, int, QImage.Format):参数 1 有 意外类型'numpy.ndarray' QImage(字节,int,int,int, QImage.Format):参数 1 具有意外类型“numpy.ndarray”
QImage(sip.voidptr, int, int, int, QImage.Format):参数 1 有 意外类型'numpy.ndarray' QImage(List [str]):参数1有 意外类型'numpy.ndarray' QImage(str,格式:str = None): 参数 1 具有意外类型 'numpy.ndarray' QImage(QImage): 参数 1 具有意外类型 'numpy.ndarray' QImage(Any): too many 论据
根据this post,这可能是由 numpy 创建视图引起的。 修改线条
im_np = np.array(img)
im_np = np.transpose(im_np, (1,0,2))
到
im_np = np.array(img)
im_np = np.transpose(im_np, (1,0,2))
im_np_cpy = np.copy(im_np)
产生同样的错误。为了测试我没有通过视图,我打印了测试结果
im_np_cpy.base is im_np
这是错误的。 使用 cv2 可以正确显示图像。 我显然错过了一些东西,知道什么吗?
干杯!
【问题讨论】:
标签: python python-3.x numpy pyqt pyqt5