问题描述
我想在 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 (将#修改为@)