Windows下用CMake编译DCMTK及配置测试
作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处
DCMTK是什么?
DCMTK(DICOM Toolkit)是由德国Offis信息技术研究所开发的开源工具包,专为处理医学影像领域的 DICOM(Digital Imaging and Communications in Medicine)标准而设计。作为医学影像信息处理的核心组件,它提供了一套完整的 API 和工具集,支持 DICOM 格式文件的解析、生成、修改及网络传输等功能,广泛应用于医疗设备开发、医学影像管理系统(如 PACS)及相关科研项目中。
核心功能与架构
DCMTK 采用模块化架构,核心组件包括:
- dcmdata:处理 DICOM 数据结构与标签(Tag)解析,支持 DICOM 文件格式的底层操作;
- dcmnet:实现 DICOM 网络通信协议(如 C-FIND、C-MOVE、C-STORE 等),支持医学设备间的影像传输;
- dcmimage:提供 DICOM 影像的像素数据处理能力,包括图像解码、窗宽窗位调整及格式转换;
- dcmjpeg/dcmraw:支持 DICOM 图像的压缩(如 JPEG、JPEG 2000)与原始数据处理;
- 工具链:包含命令行工具(如
dcm2pnm
、dcmsend
),方便用户直接进行影像格式转换或网络传输。
应用场景与特性
在医疗领域,DCMTK 是连接不同设备与系统的桥梁:
- 设备开发:医疗设备厂商用其实现 DICOM 接口,确保影像能与医院系统兼容;
- PACS/RIS 系统:用于构建影像归档与通信系统,实现影像的存储、检索与共享;
- 科研与教学:研究者可借助其 API 开发影像分析算法,或解析 DICOM 数据结构进行学术研究。
其技术特性包括:
- 跨平台支持:兼容 Windows、Linux、macOS 等主流系统,适配不同开发环境;
- 标准兼容性:持续跟进 DICOM 标准更新,支持最新的协议与数据格式;
- 开源与许可:开源许可宽松,商业与非商业项目均可灵活使用,社区生态活跃。
价值与影响
作为医学影像数字化的基础工具,DCMTK 降低了开发者处理 DICOM 标准的技术门槛,推动了医疗影像系统的标准化与互操作性。从医院的影像归档到科研中的影像分析,其稳定性与专业性使其成为行业内的重要技术支撑。
下载与编译
个人建议学会编译过程,因为每个人的开发环境都不太一样,如果你是VS2022,可以用我编译好的DCMTK库,放在文后自行获取。
1)网站:DCMTK - dicom.offis.de,下载DCMTK。
2)下载依赖库,根据自己的VS版本选择,我这边是VS2022 64位。选MD,动态链接。
3)解压后如下图所示,还需要用CMake进行编译。
CMake安装和配置参考:Windows下配置CMake(入门级教程,适合新人收藏学习)_window cmake-CSDN博客
4)安装好CMake后,按Win+R打开运行,输入cmd打开命令运行窗,输入cmake-gui,中间无空格,会出现cmake界面。source输入DCMTK的文件路径,build可以在其路径下创建个build文件夹,如下图所示。勾选advanced和grouped。
5)点击configure配置,我是vs2022 x64,点确定就开始运行了。
6)configure第一次后应该要进行一次配置。BUILD_SHARED_ILBS打钩,为了后面生成库;CMAKE_INSTALL_PREFIX设置生成库的路径,建议是在DCMTK目录下创建个bin文件;DCMTK_OVERWRITE_WIN32_COMPILER_FLAGS取消;
7)参照之前下载的依赖库,勾选下面几个选项,并在With里填写对应路径。
8)然后再次点击configure,取消勾选USE_COMPILER_HIDDEN_VISBILITY,继续点击configure,直到没有红色。
9)点击generate,生成项目。进入build文件夹,点击sln项目工程文件;选中ALL_BUILD,选择release/debug,再点击生成ALL_BUILD,此时会进行一段时间的编译操作;再选中INSTALL,点击仅生成,等待结束去看之前设置的bin文件夹,分别是DLL、头文件和LIB。
10)至此,DCMTK库的编译已经结束。
配置与测试
1)把之前bin文件夹里的所有文件单独拷贝到某个位置,比如我放在了G盘3rd文件夹下的dcmtk中,方便管理,编辑环境变量,输入dcmtk的bin文件路径。
2)创建一个VS项目,可以单项目配置也可以全局配置,我喜欢每个项目独立开,各配置各的,就这样演示了。在项目设置中,包含目录中放include路径,库目录放lib路径。
3)链接器-输入-附加依赖项和lib名字全放进去,因为名字太多,可以找到lib目录,在路径框里输入cmd,这样可以快速定位到当前位置,然后输入下方命令,即可快速获取lib的名字排列。
dir /b *.lib>out.txt
4)接下来,开始测试,输入下方代码,看看VS有没有异常提示,如果没有就直接运行,就ok啦。
#include <iostream>
#include "dcmtk/dcmdata/dctk.h"
#include "dcmtk/dcmimgle/dcmimage.h"int main()
{// 初始化DCMTK配置DcmFileFormat fileFormat;OFCondition status;// 将此路径替换为你实际的DICOM文件路径const char* filename = "DicomData/1.2.840.113704.1.111.2492.1490164523.1383.dcm";// 读取DICOM文件status = fileFormat.loadFile(filename);if (status.good()) {std::cout << "成功读取DICOM文件!" << std::endl;// 获取患者信息OFString patientName;if (fileFormat.getDataset()->findAndGetOFString(DCM_PatientName, patientName).good()) {std::cout << "患者姓名: " << patientName << std::endl;}OFString patientID;if (fileFormat.getDataset()->findAndGetOFString(DCM_PatientID, patientID).good()) {std::cout << "患者ID: " << patientID << std::endl;}// 获取研究信息OFString studyDescription;if (fileFormat.getDataset()->findAndGetOFString(DCM_StudyDescription, studyDescription).good()) {std::cout << "检查描述: " << studyDescription << std::endl;}// 尝试加载图像(如果有)DicomImage* image = new DicomImage(filename);if (image != NULL && image->getStatus() == EIS_Normal) {std::cout << "成功加载DICOM图像!" << std::endl;std::cout << "图像尺寸: " << image->getWidth() << " x " << image->getHeight() << std::endl;}else {std::cout << "无法加载DICOM图像。可能不是图像文件。" << std::endl;}delete image;}else {std::cerr << "读取DICOM文件失败: " << status.text() << std::endl;std::cerr << "请确保DICOM文件路径正确,并且dcmtk库已正确安装。" << std::endl;return 1;}return 0;
}
5)如果碰上C++特性异常,如下所示,参考下方链接解决。
解决方案:__cplusplus宏的值始终为199711L(即 C++98)_cplusplus 为199711l-CSDN博客
已编译好的库
百度云地址:
通过网盘分享的文件:dcmtk.rar
链接: https://pan.baidu.com/s/1bOZ_nAnsK68IMYFEGAf9zQ 提取码: xfxe
以上就是“Windows下用CMake编译DCMTK及配置测试”的过程。
如果文章帮助到你了,可以点个赞让我知道,我会很快乐~加油!