原链接 https://www.cnblogs.com/dhanchor/p/7193472.html
发现出错,大记录是opencv的使用版本,重新改了下
import cv2
import numpy as np
import pydicom
import matplotlib.pyplot as plt
path_file = r'D:\Mr.Yu\SE02\IM000009'
dcm = pydicom.read_file(path_file)
dcm.image = dcm.pixel_array * dcm.RescaleSlope + dcm.RescaleIntercept # 为啥
print(dcm.image) # 图像的数据
slices = []
slices.append(dcm)
print(slices) # dcm相关Tag
# img = slices[int(len(slices)/2)].image.copy() # <class 'numpy.ndarray'> shape(512,512) 为什么要 /2
img = slices[0].image.copy()
print(30*'-')
ret,img = cv2.threshold(img,90, 3071,cv2.THRESH_BINARY)
img = np.uint8(img)
plt.figure(figsize=(12,12))
plt.subplot(141)
plt.imshow(img,'gray')
plt.title('threshold')
contours,hierarchy = cv2.findContours(img, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
cv2.imshow('img',img)
cv2.waitKey(0)
# plt.imshow(contours)
mask = np.zeros(img.shape, np.uint8)
for contour in contours:
cv2.fillPoly(mask,[contour],255)
img[(mask>0)] = 255
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(2,2))
img = cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel)
img2 = slices[int(len(slices)/2)].image.copy()
img2[(img == 0)] = -2000
plt.subplot(142)
plt.imshow(slices[int(len(slices)/2)].image, 'gray')
plt.title('Original')
plt.subplot(143)
plt.imshow(img, 'gray')
plt.title('Mask')
plt.subplot(144)
plt.imshow(img2, 'gray')
plt.title('Result')
plt.show()
可以跑了,自己改文件名