考虑以下代码
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(bytes, 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, format : str = None): argument 1 has unexpected type ‘numpy.ndarray’ QImage(QImage): argument 1 has unexpected type ‘numpy.ndarray’ QImage(Any): 参数太多
根据 这篇文章,这可能是由 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 正确可视化。我显然遗漏了一些东西,知道什么吗?
干杯!
原文由 MagoNick 发布,翻译遵循 CC BY-SA 4.0 许可协议
我在转置之后添加了一个副本,如下所示:
这对我有用。