当前位置: 首页 > news >正文

医学图像处理入门:VS2019+DCMTK3.6.8编译及环境配置

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

  首先下载dcmtk软件包,此处我们下载源码和支持库来进行自己编译。下载网址:
https://dicom.offis.de/en/dcmtk/dcmtk-software-development/

如图所示,选择合适的版本进行下载,此处采用VS2019进行编译。

在这里插入图片描述

在这里插入图片描述

2. 解压文件包和支持库

  对下载的dcmtk软件包和支持库进行解压。
在这里插入图片描述
在这里插入图片描述
  在dcmtk软件包中新建build和sdk文件夹,以便后续进行cmake编译。

在这里插入图片描述

3. cmake配置

  下面对cmake进行配置,选择合适的路径文件夹以后,参照图中选项进行配置设置。

在这里插入图片描述

取消勾选DCMTK_OVERWRITE_WIN32_COMPILER_FLAGS

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
此处用到了下载的二进制支持包文件。
在这里插入图片描述

点击config按钮,等待完成后,再点击Generate按钮生成VS工程项目。在这里插入图片描述

4.编译DCMTK库

  点击Open project 按钮打开VS项目工程,然后先选择 ALL_BUILD进行生成,随后选择INSTALL进行sdk整理。
如果遇到“文件中有常量”的错误提醒,可以用记事本打开对应的.cc文件,另存为“utf8-BOM”格式即可,毕竟这是VS支持的文件格式。

在这里插入图片描述

在这里插入图片描述

编译完成后,生成下面的SDK包。

在这里插入图片描述

5.示例项目

  下面我们验证一下编译的SDK包是否可用。

5.1 下载Dicom示例文件

  先下载所需要的Dicom文件,下载网址:https://www.dicomlibrary.com/,
在左侧DICOM Samlples任意选择一个图片进去,然后点击上面的Export——Download按钮。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

对下载的文件进行解压后,如下所示:

在这里插入图片描述

5.2 创建vs项目并进行属性设置

  新建一个VS控制台程序,然后进行sdk设置:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
依赖项:

iphlpapi.lib
ws2_32.lib
wsock32.lib
netapi32.lib
ofstd.lib
oflog.lib
dcmdata.lib
zlib_d.lib

5.3 运行效果

编译生成后如下,把需要的几个dll拷贝过来。

在这里插入图片描述

在这里插入图片描述

5.4 源码

// DCMTKTest.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//#include <iostream>#include <dcmtk/config/osconfig.h>
#include <dcmtk/dcmdata/dctk.h>//读DICOM文件中的病人名
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 << "Read PatientName:" << PatientName << std::endl;}else{std::cout << "Read PatientName Error:" << status.text() << std::endl;return false;}return true;
}//修改保存DICOM文件中的病人名
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; std::string dicomFile = "F:\\Qt_vtk_itk\\series-00000\\image-00000.dcm";ReadPatientName(dicomFileformat, dicomFile); //读写病人的名称SavePatientName(dicomFileformat, dicomFile, "Lebron Wade"); //改写病人的名称为John SnowReadPatientName(dicomFileformat, dicomFile);system("pause");return 0;
}

http://www.mrgr.cn/news/47427.html

相关文章:

  • 【python基础】python内置函数 zip用法介绍
  • 51单片机(一) keil4工程与小灯实验
  • Qt重写webrtc的demo peerconnection
  • springboot+vue使用easyExcel实现导出功能
  • 在 Ubuntu 上对 Nginx 进行源码编译的详细指南
  • nginx负载均衡-基于端口的负载均衡(一)
  • 集群搭建-nacos
  • 猜Follow邀请码
  • 部署k8s1.28.2(正常网络环境即可)
  • 学习小课堂
  • ICDE 2024最新论文分享|BEEP:容量约束下能够对抗异常干扰的航运动态定价系统
  • Canal 和 MySQL 配置指南
  • 今日总结10.10
  • linux点灯驱动实验实现
  • java项目之基于保密信息学科平台系统源码(springboot+vue+mysql)
  • 动手学LLM(ch3)——编码注意力机制
  • 天玑9400拉满各种顶级天赋,更能让你轻松手机拍大片
  • 没人告诉你的职场人情世故
  • SAP S4H创建销售订单提示:无信用段分配到信用控制范围 8000
  • 动态规划和贪心算法
  • 执行node.js获取本机Ip命令,报:Error: Cannot find module ‘ip‘错误
  • Vue3 富文本:WangEditor
  • 一般在写SQL时需要注意哪些问题,可以提高查询的效率?
  • 手机通过carlink投屏到车机,播放QQ音乐卡顿问题分析
  • 网站服务器监控:Apache指标解读
  • 什么是UEBA?派拉软件的“暗能力”!