来自Numpy Array的PyQt5 QImage [英] PyQt5 QImage from Numpy Array
问题描述
考虑以下代码
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): 参数1具有意外的类型'numpy.ndarray'QImage(QImage): 参数1具有意外类型'numpy.ndarray'QImage(Any):太多 争论
TypeError: arguments did not match any overloaded call: QImage(): too many arguments QImage(QSize, QImage.Format): argument 1 has unexpected type 'numpy.ndarray' QImage(int, int, QImage.Format): argument 1 has unexpected type 'numpy.ndarray' QImage(bytes, int, int, QImage.Format): argument 1 has unexpected type 'numpy.ndarray'
QImage(sip.voidptr, int, int, QImage.Format): argument 1 has unexpected type 'numpy.ndarray' QImage(bytes, int, int, int, QImage.Format): argument 1 has unexpected type 'numpy.ndarray'
QImage(sip.voidptr, int, int, int, QImage.Format): argument 1 has unexpected type 'numpy.ndarray' QImage(List[str]): argument 1 has unexpected type '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): too many arguments
根据这篇文章可能是由numpy创建视图引起的. 修改行
According to this post this can be caused by numpy creating a view. Modifying the lines
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)
产生相同的错误.要测试我没有通过视图,我会打印测试结果
Produces the same error. To test that I am not passing a view I print the result of the test
im_np_cpy.base is im_np
,这是错误的. 使用cv2可以正确显示图像. 我显然缺少了什么,知道什么吗?
and it's False. The image is visualised correctly with cv2. I am clearly missing something, any idea what?
干杯!
推荐答案
我在转置后添加了一个副本,如下所示:
I added a copy after the transpose like this:
im_np = np.transpose(im_np,(1,0,2)).copy()
那对我有用.
这篇关于来自Numpy Array的PyQt5 QImage的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!