自学内容网 自学内容网

医学图像处理入门: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 Snow
ReadPatientName(dicomFileformat, dicomFile);

system("pause");

return 0;
}

原文地址:https://blog.csdn.net/m0_37251750/article/details/142812203

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!