DCMTK是一个比较优秀的支持DICOM文件读写的C++版本第三方库。

目录

  • 1.下载DCMTK的源文件包和支持库
  • 2.使用Cmake构建DCMTK工程
    • 2.1 CMake下载
    • 2.2 使用CMake构建工程
    • 2.3 检查工程属性
  • 3.编译DCMTK库
  • 4.编写测试用例验证DCMTK库
    • 4.1 VS环境配置
    • 4.2 编写测试代码

1.下载DCMTK的源文件包和支持库

下载链接:https://dicom.offis.de/dcmtk.php.en
   源文件:

   支持库:

   下载后进行解压

DCMTK支持库的参数说明:
选择MD的表示构建动态库,MT表示构建静态库,代码会很大。
选择iconv的,icu的库会很大。

2.使用Cmake构建DCMTK工程

2.1 CMake下载

网上说CMake版本一定一定要小于3.19.0,建议选择3.14.3。

CMake官网:https://cmake.org/download/
CMake3.14.3下载:https://github.com/Kitware/CMake/releases?
page=9



确定CMake是否安装成功:打开cmd,输入

cmake --version

2.2 使用CMake构建工程

  • 关闭所有和VS有关的程序,然后打开CMake-gui

  • 设置soure code路径,就是DCMTK包解压后的路径

  • 设置build the binaries路径,就是构建出来的DCMTK工程的存放路径(这里自己新建一个文件夹DCMTK_Solution)

  • 勾选GroupedAdvanced

  • 点击Conifigue,在打开的窗口里选择相应的VS版本(这里为Visual Studio 16 2019 Win64),点击Finish

  • 等待设置完成后,界面出现设置选项,进行设置

  • BUILD组设置如图
    将BUILD_SHARED_LIBS打勾,因为下载的是MD的工程(动态链接库),程序运行的过程中是需要dll文件的。

  • CMAKE组:可以选择保持默认。但如果C盘只有管理员权限,则可以将CMAKE_INSTALL_PREFIX设置为其他路径(后续修改工程的CMake文件也可以,这里我选择新建一个文件夹DCMTK_LIB用于存放),这个设置就是下一步DCMTK工程编译出来的一系列文件的存放路径。
    我建议这里新建一个文件夹DCMTK_LIB,后续新建VS工程配置环境的时候需要用到这个文件夹里面的配置文件

  • DCMTK组
    取消勾选DCMTK_ENABLE_EXTERNAL_DICTIONARY
    取消勾选DCMTK_OVERWRITE_WIN32_COMPILER_FLAGS
    勾选如下这些:

  • DOXYGEN组和ICU组按默认设置不需要修改

  • WITH组
    将DCMTK支持库dcmtk-3.6.6-win64-support-MD-iconv-msvc-15.8中的几个模块按照名字一一对应填入WITH组中,
    其中WITH组中有一个WITH_SNDFILEINC模块在DCMTK源码中没有这个模块,那就不填。
    填完后如下所示:

  • 再次点击Configure,等待进一步设置完成

  • 再点击Generate,生成工程后,可以在DCMTK_Solution文件夹里面看到生成的配置文件

  • 点击Open Project打开工程

2.3 检查工程属性

  • 打开VS2019的工程文件,查看任一工程的属性,查看以下工程选项(如果都满足,表示DCMTK工程构建成功)
  • 字符集是否设置为多字节字符集
  • 运行库是否为MDd和MD(Debug和Release环境下都看看)


3.编译DCMTK库

  • 打开VS2019菜单栏中的生成->批生成对话框,在ALL_BUILD里勾选Debug和Release,点击生成,编译完成后会在工程bin目录下生成exe和dll,lib目录下生成lib。
    (注意把文件选项改成ALL_BUILD)


生成过程需要等待一段时间。。。

编译成功后:

  • 在VS2019中打开批生成对话框,在INSTALL里勾选你想配置的install版本(Debug或Release),这步的作用是将DCMTK所需要的库文件和头文件拷贝到刚才CMake中设置的路径(这里我放到了DCMTK_LIB文件夹中,只选择了Debug)
  • 点击Build,会将相应的文件拷贝到最初在CMake里设置的CMAKE_INSTALL_PREFIX的路径下
  • bin目录里为exe和dll
  • include目录为头文件
  • lib目录下生成lib
  • PS:将支持库包里的zlib_d.lib拷贝到生成的lib目录下(这里因为我生成的是Debug库,所以拷贝的是zlib_d.lib库)

4.编写测试用例验证DCMTK库

4.1 VS环境配置

  • 新建一个控制台程序
  • 配置该工程项目的中VC++目录——包含目录库目录
    (注意保持环境一致)
  • 配置相关的依赖库
iphlpapi.lib
ws2_32.lib
wsock32.lib
netapi32.lib
ofstd.lib
oflog.lib
dcmdata.lib
zlib_d.lib

(前四个为系统库、随后三个为DCMTK库、最后一个是支持包里的库)

  • 将DCMTK的bin目录下的ofstd.dlloflog.dlldcmdata.dll拷贝到该工程的exe程序同目录下

4.2 编写测试代码

  • 先下载所需要的Dicom文件,并把文件路径修改在代码中
    网址:https://www.dicomlibrary.com/
    进去之后左下角DICOM Samlples随便点一个图片进去——点击上面的Export——Download




    解压后如下:

  • 编写测试代码
    本程序的功能:
    读DICOM文件中的病人名(函数ReadPatientName());
    保存DICOM文件中的病人名(SavePatientName())。
// C++_Dicom_Sample.cpp : Defines the entry point for the console application.
//#include <dcmtk/config/osconfig.h>
#include <dcmtk/dcmdata/dctk.h>
#include <iostream>bool ReadPatientName(DcmFileFormat& fileformat, std::string& filePath)
{OFCondition status = fileformat.loadFile(filePath.c_str());if (!status.good()){std::cout << "Load Dimcom File Error: " << status.text() << std::endl;return false;}OFString PatientName;status = fileformat.getDataset()->findAndGetOFString(DCM_PatientName, PatientName);if (status.good()){std::cout << "Get PatientName:" << PatientName << std::endl;}else{std::cout << "Get PatientName Error:" << status.text() << std::endl;return false;}return true;
}bool SavePatientName(DcmFileFormat& fileformat, std::string& filePath, const std::string& info)
{OFCondition status = fileformat.getDataset()->putAndInsertString(DCM_PatientName, info.c_str());if (status.good()){std::cout << "Save PatientName:" << info.c_str() << std::endl;}else{std::cout << "Save PatientName Error: " << status.text() << std::endl;return false;}status = fileformat.saveFile(filePath.c_str());if (!status.good()){std::cout << "Save Dimcom File Error: " << status.text() << std::endl;return false;}return true;
}int main()
{DcmFileFormat dicomFileformat; //定义DICOM格式的变量std::string dicomFile = "E:\\C++_work\\DCMTK_Sample\\Anonymized_20211126\\series-00000\\image-00001.dcm";ReadPatientName(dicomFileformat, dicomFile); //读写病人的名称SavePatientName(dicomFileformat, dicomFile, "John Snow"); //改写病人的名称为John SnowReadPatientName(dicomFileformat, dicomFile); system("pause");return 0;
}
  • 运行并查看输出

    正确输出病人姓名,至此已成功编译DCMTK库

感谢以下大佬,避免自己走了很多坑
https://blog.csdn.net/weixin_42089190/article/details/117440207
https://www.jianshu.com/p/b06349d609ba
https://www.bilibili.com/video/BV1m4411T728?from=search&seid=5091255401670271543&spm_id_from=333.337.0.0
DCMTK 3.6.2(MD支持库)与Microsoft Visual Studio 2017开发环境的搭建
https://blog.csdn.net/chaoenhu/article/details/78200274

VS2019+DCMTK3.6.6环境配置相关推荐

  1. VS2019之wpf开发环境配置(非常详细)

    vs2019之c#桌面程序wpf开发环境的配置 之前一直在用vs2019+qt来开发程序,但是最近看同事用了.net开发了一个小程序,感觉.net也挺好用,而且不需要安装和配置qt,所以给大家介绍一下 ...

  2. VS2019+OpenCV4.5.1 环境配置+一劳永逸法(附下载地址)

    准备工作: 系统安装: 1.Visual Studio 2019(VS2019) 2.OpenCV4.5.1(下载地址:OpenCV各个版本下载) 一.系统环境变量 1.桌面右键单击[我的电脑]-&g ...

  3. VS2019 windows驱动开发环境配置

    配置Windows驱动开发环境 VS2019 下载VS2019 下载链接 https://visualstudio.microsoft.com/zh-hans/downloads/ 选择你所需要的开发 ...

  4. dcmtk医学图像处理教程(一)环境配置VS2019+dcmtk3.6.6

    开发环境: 文章目录 0 前言 为什么使用visual studio? 如何安装? 其他一些可参考资料,实在觉得本文无法满足需求,可以查看 1 下载dcmtk源代码 1.2 下载文件时不同参数的比较 ...

  5. V_rep与vs2019开发环境配置

    V_rep与vs2019开发环境配置 V_rep编译生成所需文件 编译文件 添加环境变量 建立VS2019项目工程并配置 V_rep配置及示例代码 前提是安装好V_rep和vs2019,本文仅讲解如何 ...

  6. 最新CUDA环境配置(Win10 + CUDA 11.6 + VS2019)

    最新CUDA环境配置(Win10 + CUDA 11.6 + VS2019) 本篇博客根据NVIDIA 官方文档所述, 并根据自己实践得出. 供各位需要的朋友参考. 1.前言 本篇文章的软件环境为: ...

  7. vs2019使用openssl3.0的环境配置并进行DES加解密

    vs2019使用openssl3.0的环境配置并进行DES加/解密 1.环境配置 (1)在电脑上安装好vs2019,openssl3.0 (2)打开vs2019按一下步骤进行配置 右击项目--属性-- ...

  8. 九七的Windows内核驱动开发 WIN10-2004+VS2019+WDK驱动开发环境安装及配置

    WIN10-2004+VS2019+WDK驱动开发环境安装及配置 一.定义介绍   本节介绍如何在Windows10系统(2004版本,操作步骤中有如何查看版本)中安装VS2019及WDK开发包,并进 ...

  9. Fluent UDF编译环境配置 VS2019

    Fluent UDF编译环境配置 VS2019 环境配置 问题记录 继续记录调试过程 仅用一个host 仅用一个node 两个都放进去 换个电脑继续报错 记录错误 环境配置 生成PATH文件的,有的没 ...

  10. 【SLAM】SLAM环境配置 Win10+VS2019+OpenCV+PCL+g2o+Vcpkg

    目录 SLAM环境配置 Win10+VS2019+OpenCV+PCL+g2o+vcpkg 软件及版本 1. Windows 10 2. Visual Studio 2019 3. OpenCV 4. ...

最新文章

  1. WPF的消息机制(二)- WPF内部的5个窗口之隐藏消息窗口
  2. 前端编程之jQuery
  3. js 数组移除_JS某些封装方法
  4. 汉字转换成拼音的代码(asp版)
  5. Windows判断是否为64位程序(C++)
  6. 如何在Linux系统上刷抖音
  7. Mac 10.12安装迅雷2.7.2
  8. 电商促销后台设计,写得太好了!
  9. 类库从自带的配置文件中获取信息(DLL文件 获取 DLL文件自带的配置信息) z...
  10. R语言怎么导入表格画图_立创EDA画图不求人18 | 视频教程 | 原理图横向纵向切换...
  11. 二级域名间相互请求 ajax跨域请求
  12. 唤客猫SCRM功能详解(二)
  13. 先尝甜头后食苦果 曾经的光伏巨头如今都身在何方?
  14. python中re.search()函数的用法
  15. 换个方式认识一下——微信公众号搜索公众号列表 API
  16. 倾斜摄影数据转cesium 3dtile(详细步骤)
  17. java对焦_Android camera摄像头对焦,zoom的通知事件回调,告诉java应用层已经对焦完成...
  18. 国产ARM核心工控主板介绍
  19. 顶峰Android手机视频转换器,凡人Android手机视频转换器
  20. ArcMap 制图出图

热门文章

  1. JUnit 4 超详细教程(一)
  2. android 测试手机屏幕,如何才能知道自己手机屏幕质量如何 安卓手机专业测屏神器体验...
  3. js加html连线实现流程,(jsPlumb开发入门教程实现html5拖拽连线.doc
  4. vue相关插件及框架全家桶
  5. pclint vc2012配置
  6. Windows电脑上最好的3个txt阅读器
  7. NEMA-0183(GPGGA,GPRMC,GPGSA,GPGSV,GPVTG)详解
  8. 使用ApiPost按顺序传参及测试多个接口
  9. php字符串长度获取_php哪个函数能取得字符串长度
  10. php 按指定长度分割字符串,php实现将字符串按照指定距离进行分割的方法