P y Q t 5 − Q D i a l PyQt5-QDial PyQt5−QDial
# 0.导入需要的包和模块
import pydicom
from PyQt5.Qt import *
import sys
from PIL import Image
import os
class Window(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("Major")
self.resize(800, 800)
self.cwd = os.getcwd() # 获取当前路径
'''
1.展示图片的QLabel
'''
self.show_label = QLabel(self)
self.show_label.resize(512,512)
self.show_label.setStyleSheet("background-color:#888888")
self.show_label.move(100,100)
'''
2.打开dicom图片的btn
'''
self.open_btn = QPushButton(self)
self.open_btn.setText("打开Dicom图像")
self.open_btn.move(0,0)
self.open_btn.clicked.connect(self.open_dicom_file)
'''
3.控制图片的QSlider
'''
self.sd = QDial(self)
self.sd.move(200,0)
# 设置最大值和最小值
self.sd.setMinimum(0)
self.sd.setMaximum(360)
# 绑定槽函数
self.sd.valueChanged.connect(self.processing_img)
# 外观倒立
self.sd.setInvertedAppearance(True)
'''
4.处理的图像
'''
self.processed_img = None
def processing_img(self):
self.show_label.setText(str(self.sd.value()))
img = Image.open("rgb_show.jpg")
img_rotated = img.rotate(angle=self.sd.value())
img_rotated.save("rgb_rotated_show.jpg")
self.show_label.setPixmap(QPixmap("rgb_rotated_show.jpg"))
self.show_label.setScaledContents(True)
def open_dicom_file(self):
print(self.show_label)
fileName_choose, filetype = QFileDialog.getOpenFileName(self,
"选取文件",
self.cwd, # 起始路径
"All Files (*);;Text Files (*.txt)") # 设置文件扩展名过滤,用双分号间隔
if fileName_choose == "":
print("\n取消选择")
return
print("\n你选择的文件夹为:")
print(fileName_choose)
dcm = pydicom.read_file(fileName_choose)
raw_img = dcm.pixel_array
# img = Image.fromarray(raw_img)
# img.show()
# 2.映射到0-255之间
raw_flatten_img = raw_img.flatten()
max_val = max(raw_flatten_img)
min_val = min(raw_flatten_img)
raw_img = (raw_img - min_val) / (max_val - min_val) # 图像归一化
raw_img = raw_img * 255
img = Image.fromarray(raw_img)
img.convert('RGB').save("rgb_show.jpg", format='jpeg')
self.show_label.setPixmap(QPixmap("rgb_show.jpg"))
self.show_label.setScaledContents(True)
if __name__ == '__main__':
# 1.创建一个应用程序对象
app = QApplication(sys.argv)
# 2.控件的操作
# 2.1创建控件
window = Window()
# 2.2设置控件
# 2.3展示控件
window.show()
# 3.应用程序的执行,进入到信息循环
sys.exit(app.exec_())