解决方法:将"all.jpg"改为"all.png"
源码:(注意:文件需要自带)
import matplotlib.pyplot as plt # plt 用于显示图片
import matplotlib.image as mpimg # mpimg 用于读取图片
import pydicom
import pylab
import PIL.Image as Image
import math
import numpy as np
# #引入dicom模块
import os
def load_scan(path):
slices = [pydicom.read_file(path + '/' + s) for s in os.listdir(path)]
return slices
INPUT_FOLDER = r"C:\Users\Lenovo\Desktop\python\test\patient32\P32dicom"
first_patient = load_scan(INPUT_FOLDER)
# # print(first_patient[0])
# # print (first_patient [0].dir())
# # print (first_patient[0].dir("pat"))
# # print (first_patient [0].PatientName)
#
# pylab.imshow(first_patient[0].pixel_array,cmap=pylab.cm.bone)
# pylab.show()
def plot_ct_scan(scan):
#获取文件夹内的文件个数
length = len(scan)
#根据总面积求每一个的大小
each_size = int(math.sqrt(float(810*810)/length))
#每一行可以放多少个
lines = int(810/each_size)
#生成白色背景新图片
image = Image.new('RGBA', (810, 810),'white')
x = 0
y = 0
for i in range(0,length):
img=Image.fromarray(scan[i].pixel_array.astype(int))#numpy.ndarray类型,还得是整数
img = img.resize((each_size, each_size), Image.ANTIALIAS) #resize image with high-quality
image.paste(img, (x * each_size, y * each_size))
x += 1
if x == lines:
x = 0
y += 1
image.save('./' + "all.png")
plot_ct_scan(first_patient)
lena = mpimg.imread('all.png') # 读取和代码处于同一目录下的 lena.png
# 此时 lena 就已经是一个 np.array 了,可以对它进行任意处理
lena.shape # (512, 512, 3)
plt.imshow(lena) # 显示图片
plt.axis('on') # 不显示坐标轴
plt.show()
本人工程:
如果想输出jpg图片可参考:
输出jpg图片:https://blog.csdn.net/vivian7fan/article/details/125613888