次のコードを検討する
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):引数が多すぎます
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で正しく視覚化されます。私は明らかに何かを逃しています、何か考えはありますか?
乾杯!
次のように転置した後にコピーを追加しました:
im_np = np.transpose(im_np,(1,0,2)).copy()
それでうまくいきました。
Qimage2ndarrayモジュールが1行のコードでニーズに合っているかどうかを確認してください https://pypi.org/project/qimage2ndarray/
yourQImage=qimage2ndarray.array2qimage(yournumpyarray)