f DevOps与敏捷开发-Windows下用CMake编译DCMTK及配置测试 - Powered by qidao123.com技术社区

Windows下用CMake编译DCMTK及配置测试

打印 上一主题 下一主题

主题 1982|帖子 1982|积分 5950

作者:翟天保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的名字排列。
  1. dir /b *.lib>out.txt
复制代码

       4)接下来,开始测试,输入下方代码,看看VS有没有异常提示,如果没有就直接运行,就ok啦。
  1. #include <iostream>
  2. #include "dcmtk/dcmdata/dctk.h"
  3. #include "dcmtk/dcmimgle/dcmimage.h"
  4. int main()
  5. {
  6.     // 初始化DCMTK配置
  7.     DcmFileFormat fileFormat;
  8.     OFCondition status;
  9.     // 将此路径替换为你实际的DICOM文件路径
  10.     const char* filename = "DicomData/1.2.840.113704.1.111.2492.1490164523.1383.dcm";
  11.     // 读取DICOM文件
  12.     status = fileFormat.loadFile(filename);
  13.     if (status.good())
  14.     {
  15.         std::cout << "成功读取DICOM文件!" << std::endl;
  16.         // 获取患者信息
  17.         OFString patientName;
  18.         if (fileFormat.getDataset()->findAndGetOFString(DCM_PatientName, patientName).good())
  19.         {
  20.             std::cout << "患者姓名: " << patientName << std::endl;
  21.         }
  22.         OFString patientID;
  23.         if (fileFormat.getDataset()->findAndGetOFString(DCM_PatientID, patientID).good())
  24.         {
  25.             std::cout << "患者ID: " << patientID << std::endl;
  26.         }
  27.         // 获取研究信息
  28.         OFString studyDescription;
  29.         if (fileFormat.getDataset()->findAndGetOFString(DCM_StudyDescription, studyDescription).good())
  30.         {
  31.             std::cout << "检查描述: " << studyDescription << std::endl;
  32.         }
  33.         // 尝试加载图像(如果有)
  34.         DicomImage* image = new DicomImage(filename);
  35.         if (image != NULL && image->getStatus() == EIS_Normal)
  36.         {
  37.             std::cout << "成功加载DICOM图像!" << std::endl;
  38.             std::cout << "图像尺寸: " << image->getWidth() << " x " << image->getHeight() << std::endl;
  39.         }
  40.         else
  41.         {
  42.             std::cout << "无法加载DICOM图像。可能不是图像文件。" << std::endl;
  43.         }
  44.         delete image;
  45.     }
  46.     else
  47.     {
  48.         std::cerr << "读取DICOM文件失败: " << status.text() << std::endl;
  49.         std::cerr << "请确保DICOM文件路径正确,并且dcmtk库已正确安装。" << std::endl;
  50.         return 1;
  51.     }
  52.     return 0;
  53. }
复制代码

       5)如果碰上C++特性异常,如下所示,参考下方链接解决。

解决方案:__cplusplus宏的值始终为199711L(即 C++98)_cplusplus 为199711l-CSDN博客

已编译好的库

百度云地址:
通过网盘分享的文件:dcmtk.rar
链接: https://pan.baidu.com/s/1bOZ_nAnsK68IMYFEGAf9zQ 提取码: xfxe 

       以上就是“Windows下用CMake编译DCMTK及配置测试”的过程。 
       如果文章帮助到你了,可以点个赞让我知道,我会很快乐~加油!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

东湖之滨

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表