DCMTK简介:
由于现在的医学影像设备的图像存储和传输正在逐渐向DICOM标准靠拢,在我们进行医学图像处理的过程中,经常需要自己编写和DICOM格式的图像相关的各种程序模块,以完成自己处理功能。如果从头开始理解DICOM的协议,然后完全自己编写这些代码来实现这些协议,是一件工程浩大的事情。德国offis公司开发的DCMTK,为我们提供了实现DICOM协议的一个平台,使得我们可以在它的基础上轻松的完成自己的主要工作,而不必把太多的精力放在实现DICOM协议的细节问题上。本文以WINDOWSXP+VC6.0为开发平台,从DCMTK的下载、调试、使用等方面介绍基于DCMTK的DICOM相关程序编写过程。
这个开发包经过10多年的开发和维护,已经基本实现了DICOM协议的所有内容。该开发包提供所有的源代码、支持库和帮助文档。DCMTK提供了在各种操作系统下使用的可能版本,如LINUX、SUN、MACOS、WINDOWS等,用户可根据自己的开发平台进行编译。
一、安装包下载:
1.下载源文件包如下:(随便选择一个下载)
2.下载帮助文档:
3.选择对应的依赖库:
二、使用CMake编译:
1.打开CMake工具:
2.执行configure:(为了确保无误,选择Visual Studio 15 2017 和 X64)
3.Finish,等待第一次编译成功:
修改配置如下:
1)勾选共享库:
2).确保为MD
/MD和/MDd表示采用多线程CRT库的动态dll版本,会使应用程序使用运行时库特定版本的多线程DLL。链接时将按照传统VC链接dll的方式将运行时库MSVCRxx.DLL的导入库MSVCRT.lib链接,在运行时要求安装了相应版本的VC运行时库可再发行组件包(当然把这些运行时库dll放在应用程序目录下也是可以的)。
因/MD和/MDd方式不会将运行时库链接到可执行文件内部,可有效减少可执行文件尺寸。当多项目以MD方式运作时,其内部会采用同一个堆,内存管理将被简化,跨模块内存管理问题也能得到缓解。
结论:/MD和/MDd将是潮流所趋,/ML和/MLd方式请及时放弃,/MT和/MTd在非必要时最好也不要采用了。
/MD 与 /MT 用于Release版本,前者表示链接时,不链接VC的运行时库(msvcrt.lib),而采用动态(msvcrtXX.dll,其中XX表示使用的版本);相应地,后者则表示静态链接VC的运行时库,这样的结果是链接生成的的目标模块体积明显比前者要大一些。
/MTD与/MDD 用于Debug版本,其它规则同上。
3).选择VS2017 INSTALL时生成的文件路径(之后配置中会用到的DCMTK_INSTALL_PATH):
4).一定要取消该勾选,我们用的为x64位,以免出错
5).添加以下勾选,为后面编译依赖连接库做准备
6).配置依赖库文件(该路径均为我们下载的依赖文件)
4.下一步:执行Generate,点击Open Project:
5.查看VS2017配置情况:
6.下一步:点击生成->批生成
7.下一步:等待生成成功,执行INSTALL
8.漫长的等待,生成如下文件夹:
三、测试:
1.创建一个新项目,加入如下代码进行测试:
#include "dcmtk/dcmdata/dctk.h"
#include <iostream>
using namespace std;
int main()
{
DcmFileFormat fileformat;
OFCondition status = fileformat.loadFile("E:/Qt_project/test/123.dcm");
if (status.good())
{
OFString patientsName;
if (fileformat.getDataset()->findAndGetOFString(DCM_PatientName, patientsName).good())
{
cout << "Patient's Name: " << patientsName << endl;
}else{
cerr << "Error: cannot access Patient's Name!" << endl;
}
}else{
cerr << "Error: cannot read DICOM file (" << status.text() << ")" << endl;
}
return 0;
}
2.配置文件添加库文件(.pro文件):
INCLUDEPATH += DCMTK_INSTALL_PATH\include
#an example: INCLUDEPATH += D:\DCMTK\dcmtk-install\include
LIBS += DCMTK_INSTALL_PATH\lib\*
#an example: LIBS += D:\DCMTK\dcmtk-install\lib\*
3.添加动态库到DEbug文件夹下面(如果没有这一步在编译时能通过,但是在运行时无法正常运行):
将DCMTK_INSTALL_PATH/bin路径下面所有.dll动态库文件拷贝到Qt build生成的debug(release)文件夹下面
4.运行QT程序: