PyQt QImage 无法复制,崩溃无错误代码

问题描述

我想在 QImage 上显示并转换为 Qpixmap,但是当我想操作(通过 Qpixmap 复制、缩放或构造)qimage 时,该过程将崩溃。但是如果我复制到一个小矩形,例如 (2048,2048)它不再是崩溃了。

这个 arr 是 numpy ndarray,shape:(3408,2235) dtype:uint16,最大值为 65535,最小值为 0。

我想知道为什么进程会在没有错误代码的情况下崩溃。

我该如何解决

from PyQt5 import QtCore,QtGui,QtWidgets
from pydicom import dcmread
import numpy as np
class Ui_MainWindow(object):
    def setupUi(self,MainWindow):
        MainWindow.setobjectName("MainWindow")
        MainWindow.resize(2048,2048)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setobjectName("centralwidget")
        self.photo = QtWidgets.QLabel(self.centralwidget)
        self.photo.setGeometry(QtCore.QRect(0,2048,2048))
        self.photo.setText("")
        ds = dcmread('./5F329172_20170623_CR_2_1_1')
        arr = ds.pixel_array
        print("ndarray shape: ",arr.shape," dtype: ",arr.dtype)
        print("ndarray max: ",np.max(arr)," min: ",np.min(arr))
        qimage = QtGui.QImage(arr,arr.shape[1],arr.shape[0],QtGui.QImage.Format_Grayscale16)
        qimage = qimage.copy()
        # qimage = qimage.copy(QtCore.QRect(0,2048)) this will not crash
        pixmap = QtGui.Qpixmap.fromImage(qimage)
        self.photo.setpixmap(pixmap)
        self.photo.setScaledContents(True)
        self.photo.setobjectName("photo")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0,800,21))
        self.menubar.setobjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setobjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)


    def retranslateUi(self,MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setwindowTitle(_translate("MainWindow","MainWindow"))
     

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

更新:

dicom 数据:5F329172_20170623_CR_2_1_1

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)