if None in (dataset.is_little_endian, dataset.is_implicit_VR):
AttributeError: 'dict' object has no attribute 'is_little_endian'None代替'None',并dcmwriteinsted的的save_as。import pydicom
from pydicom.misc import is_dicom
fp ='1.dcm'
dico = pydicom.filereader.dcmread(fp)
if(is_dicom(dico)):
dico['PatientID']= 'None'
dico['PatientBirthDate'] = None
dico['is_little_endian'] = True
dico['is_implicit_VR'] = True
path = '/dataset'
# dico.save_as(os.path.join(path,'Anonymous.dcm'))
pydicom.dcmwrite(os.path.join(path,'Anonymous.dcm'), dico)
Run Code Online (Sandbox Code Playgroud)
好的,save_as如果您像第一次尝试一样使用它,那么 using 应该确实有效。这是应该起作用的代码:
import pydicom
from pydicom.misc import is_dicom
dico = pydicom.filereader.dcmread('1.dcm')
dico.PatientID = 'None'
dico.PatientBirthDate = None
path = '/dataset'
dico.save_as(os.path.join(path,'Anonymous.dcm'))
# alternatively:
# dcmwrite(os.path.join(path,'Anonymous.dcm', dico)
Run Code Online (Sandbox Code Playgroud)
请注意,我已更改dico['PatientID']为dico.PatientID. 这不仅是一个方便的快捷方式,而且还改变了语义:如果您分配给dico['PatientID'],则必须分配一个DataElement:
dico['PatientID'] = DataElement(0x00100020, 'PN', b'None')
Run Code Online (Sandbox Code Playgroud)
而如果使用关键字,则可以直接赋值(在DataElement内部转换为 a)。
我同意文档在这方面有些缺乏 - 我认为添加一个简单的示例来读取 DICOM 文件、修改它并将其写回是有意义的。但如果您查看基本数据集文档,您应该会找到大部分所需的信息。
关于上述属性的注释is_little_endian和is_implicit_VR:仅当您编写没有传输语法集的新数据集时才需要这些属性。这是该情况的一个示例。如果数据集是从有效的 DICOM 文件中读取的,则它已设置了这些属性。
| 归档时间: |
|
| 查看次数: |
428 次 |
| 最近记录: |