dicom文件由导言、前缀和多个数据元素构成,一个.dcm文件可以形象的看成一本字典,而每个字都由特定的Tag作为检索。
Tag的值中存放有该图对应患者的姓名、年龄、性别等,还包括拍摄医院的名称、操作技师的名字等,以及每一张图的像素信息。
文件结构可以参考 一滩海豹博主的文章:
dicom文件结构_dicom数据结构_一滩海豹的博客-CSDN博客
了解了基本情况,我们进行接下来的操作。
1. 任务目标
使用DCMTK读取一张dicom图像的信息,并将数据打印出来进行阅读。
2. 使用dcmdump
dcmtk本身就有一个工具APP可作为解析器,dcmdump位于dcmdata package,工具的介绍页面为:
DCMTK: dcmdump: Dump DICOM file and data set
在命令行输入
//dcmdump [options] dcmfile-in
dcmdump F:\test.dcm
即可打印.dcm文件tag信息
3. 新建CPP项目读取tag
#include <iostream>
#include "dcmtk/dcmdata/dcfilefo.h"
#include "dcmtk/dcmdata/dcdeftag.h"
using namespace std;
int main()
{
DcmFileFormat fileformat;
OFCondition status = fileformat.loadFile("F:/test.dcm");
DcmDataset* dataset = fileformat.getDataset();
if (status.good())
{
OFString patientName;
if (dataset->findAndGetOFString(DCM_PatientName, patientName).good())
{
cout << "Patient's Name: " << patientName << endl;
}
else
cerr << "Error: cannot access Patient's Name!" << endl;
}
else
cerr << "Error: cannot read DICOM file (" << status.text() << ")" << endl;
system("pause");
return 0;
}
DcmFileFormat:
头文件:/dcfilefo.h
功能:用来操作dicom文件的类
DcmDataset:
头文件:/dcdatset.h
功能:是一个记录dicom tag的数据结构
OFCondition:
头文件:/ofcond.h
功能:用来记录状态
DCM_PatientName:
头文件:/dcdeftag.h
功能:记录了dicom的tag
如果无法编译成功,需要添加 include 文件夹和 dcmdata.lib,ofstd.lib