dicom协议开源库DCMTK安装和使用
2017-08-31 14:01
288 查看
背景
DCMTK是由德国offis公司提供的开源项目,几乎实现了完整的DICOM协议,是3大dicom开源库之一。DCMTK采用C++语言开发。
准备工作
1. 安装CMake https://cmake.org/download/,我电脑里安装的3.8.2版本。
2. 下载dcmtk3.6.0 源码,解压。
CMAKE编译
1.修改CMakeList.txt配置文件。打开CMakeLists.txt,使用文本编辑器的替换功能,把/MTd 替换成/MDd 、/MD 替换成 /MT,这样做是指定我们编译动态库版本而非静态库版本;修改DCMTK支持库,搜索DCMTK build options ,可以将前面的5个支持项(DCMTK_WITH_TIFF,DCMTK_WITH_PNG,DCMTK_WITH_XML,DCMTK_WITH_ZLIB,DCMTK_WITH_OPENSSL)都设置成ON,需要相关的库支持,不过测试过不下载相应的库,后面的编译也不会出问题,所以这里根据需要设置。
2. a) 关闭VS2012,打开CMake-gui,选择dcmtk3.6.0源码位置,选择生成路径;
b) 点击Configure,选择Visual Studio 11 2012 Win64(我的系统是64位的,这里还可以选择VisualStudio 11 2012, 这样会生成X86库),点击finish。
c) 根据需要设置下CMAKE_INSTALL_PREFIX,64位程序默认是”C:/ProgramFiles/DTMCK”,因为我计算机上的权限问题,我的安装路径改到“D:/Program Files/DTMCK”,设置好之后点击Generate,等待生成VS工程,生成完成之后,点击OpenProject打开VS工程。
VS2012编译dcmtk库
经过上面的步骤,我们已经得到了用于编译dcmtk库的vs2012工程,点击vs2012菜单:生成-批生成(英文版是Build->BatchBuild),选择ALL_BUILD Debug版和Release版,点击生成,漫长的等待之后,会出现下面的画面,代表dcmtk库已经生成好了。安装库,点击vs2012菜单:生成-批生成,选择INSTALL Debug版本,点击生成,库安装到前面指定的目录。
VS项目属性配置(这里使用的都是64位库)
1. 新建一个VS工程,添加DTMCK头文件包含:
2. 添加DTMCK库路径和需要的库包含:
3. 测试源码,(这里借用了Opencv做图像显示)
//dcmtk.cpp :
定义控制台应用程序的入口点。
#include"stdafx.h"
#include"dcmtk\config\osconfig.h"
#include"dcmtk\dcmdata\dctk.h"
#include"opencv2\opencv.hpp"
#include"dcmtk\dcmimage\diargimg.h"
usingnamespacecv;
usingstd::cout;
int_tmain(intargc,_TCHAR*argv[])
{
DcmFileFormatdfile;
dfile.loadFile("image-000001.dcm");
DcmMetaInfo*Metalnfo=dfile.getMetaInfo();
DcmTagTag;
Tag=Metalnfo->getTag();
Uint16G_tag=Tag.getGTag();
cout<<"G_tag: "<<G_tag<<std::endl;
DcmDataset*data=dfile.getDataset();
DcmElement*element=NULL;
data->findAndGetElement(DCM_PixelData,element);
doubledata_len=data->getLength();
doubleelement_len=element->getLength();
cout<<"data_len "<<data_len<<std::endl;;
cout<<"elemetn_len "<<element_len<<std::endl;;
OFStringpatientName;
data->findAndGetOFString(DCM_PatientName,patientName);
cout<<"patientName: "<<patientName.data()<<std::endl;;
OFStringpatientId;
data->findAndGetOFString(DCM_PatientID,patientId);
cout<<"patientId: "<<patientId<<std::endl;;
OFStringpatientAge;
data->findAndGetOFString(DCM_PatientAge,patientAge);
cout<<"patientAge: "<<patientAge.data()<<std::endl;;
OFStringPatientPosition;
data->findAndGetOFString(DCM_PatientPosition,PatientPosition);
cout<<"PatientPosition: "<<PatientPosition.data()<<std::endl;;
OFStringImagePositionPatient;
data->findAndGetOFString(DCM_ImagePositionPatient,ImagePositionPatient);
cout<<"ImagePositionPatient: "<<ImagePositionPatient<<std::endl;;
OFStringPixelSpacing;
data->findAndGetOFString(DCM_PixelSpacing,PixelSpacing);
cout<<"PixelSpacing: "<<PixelSpacing.data()<<std::endl;;
Uint16*pixData16;
element->getUint16Array(pixData16);
cout<<element->getLength()<<std::endl;
cv::Matimag=cv::Mat(512,512,CV_8U,pixData16);//
, element);
for(inti=0;i<100;i++)
{
cout<<*(pixData16+i)<<"
";
}
cv::imshow("image",imag);
cv::waitKey(0);
return0;
}
结果
上面编译使用的是64位库,32位库编译使用过程和64库一样。
百度网盘连接有VS2012 VS2013 32位 64位 Debug Release 库和测试用数据:
http://pan.baidu.com/s/1bpzZB4r r678
opencv库的安装使用请参见我的上一篇博文:http://blog.csdn.net/wanhongluli/article/details/77573854
DCMTK是由德国offis公司提供的开源项目,几乎实现了完整的DICOM协议,是3大dicom开源库之一。DCMTK采用C++语言开发。
准备工作
1. 安装CMake https://cmake.org/download/,我电脑里安装的3.8.2版本。
2. 下载dcmtk3.6.0 源码,解压。
CMAKE编译
1.修改CMakeList.txt配置文件。打开CMakeLists.txt,使用文本编辑器的替换功能,把/MTd 替换成/MDd 、/MD 替换成 /MT,这样做是指定我们编译动态库版本而非静态库版本;修改DCMTK支持库,搜索DCMTK build options ,可以将前面的5个支持项(DCMTK_WITH_TIFF,DCMTK_WITH_PNG,DCMTK_WITH_XML,DCMTK_WITH_ZLIB,DCMTK_WITH_OPENSSL)都设置成ON,需要相关的库支持,不过测试过不下载相应的库,后面的编译也不会出问题,所以这里根据需要设置。
2. a) 关闭VS2012,打开CMake-gui,选择dcmtk3.6.0源码位置,选择生成路径;
b) 点击Configure,选择Visual Studio 11 2012 Win64(我的系统是64位的,这里还可以选择VisualStudio 11 2012, 这样会生成X86库),点击finish。
c) 根据需要设置下CMAKE_INSTALL_PREFIX,64位程序默认是”C:/ProgramFiles/DTMCK”,因为我计算机上的权限问题,我的安装路径改到“D:/Program Files/DTMCK”,设置好之后点击Generate,等待生成VS工程,生成完成之后,点击OpenProject打开VS工程。
VS2012编译dcmtk库
经过上面的步骤,我们已经得到了用于编译dcmtk库的vs2012工程,点击vs2012菜单:生成-批生成(英文版是Build->BatchBuild),选择ALL_BUILD Debug版和Release版,点击生成,漫长的等待之后,会出现下面的画面,代表dcmtk库已经生成好了。安装库,点击vs2012菜单:生成-批生成,选择INSTALL Debug版本,点击生成,库安装到前面指定的目录。
VS项目属性配置(这里使用的都是64位库)
1. 新建一个VS工程,添加DTMCK头文件包含:
2. 添加DTMCK库路径和需要的库包含:
3. 测试源码,(这里借用了Opencv做图像显示)
//dcmtk.cpp :
定义控制台应用程序的入口点。
#include"stdafx.h"
#include"dcmtk\config\osconfig.h"
#include"dcmtk\dcmdata\dctk.h"
#include"opencv2\opencv.hpp"
#include"dcmtk\dcmimage\diargimg.h"
usingnamespacecv;
usingstd::cout;
int_tmain(intargc,_TCHAR*argv[])
{
DcmFileFormatdfile;
dfile.loadFile("image-000001.dcm");
DcmMetaInfo*Metalnfo=dfile.getMetaInfo();
DcmTagTag;
Tag=Metalnfo->getTag();
Uint16G_tag=Tag.getGTag();
cout<<"G_tag: "<<G_tag<<std::endl;
DcmDataset*data=dfile.getDataset();
DcmElement*element=NULL;
data->findAndGetElement(DCM_PixelData,element);
doubledata_len=data->getLength();
doubleelement_len=element->getLength();
cout<<"data_len "<<data_len<<std::endl;;
cout<<"elemetn_len "<<element_len<<std::endl;;
OFStringpatientName;
data->findAndGetOFString(DCM_PatientName,patientName);
cout<<"patientName: "<<patientName.data()<<std::endl;;
OFStringpatientId;
data->findAndGetOFString(DCM_PatientID,patientId);
cout<<"patientId: "<<patientId<<std::endl;;
OFStringpatientAge;
data->findAndGetOFString(DCM_PatientAge,patientAge);
cout<<"patientAge: "<<patientAge.data()<<std::endl;;
OFStringPatientPosition;
data->findAndGetOFString(DCM_PatientPosition,PatientPosition);
cout<<"PatientPosition: "<<PatientPosition.data()<<std::endl;;
OFStringImagePositionPatient;
data->findAndGetOFString(DCM_ImagePositionPatient,ImagePositionPatient);
cout<<"ImagePositionPatient: "<<ImagePositionPatient<<std::endl;;
OFStringPixelSpacing;
data->findAndGetOFString(DCM_PixelSpacing,PixelSpacing);
cout<<"PixelSpacing: "<<PixelSpacing.data()<<std::endl;;
Uint16*pixData16;
element->getUint16Array(pixData16);
cout<<element->getLength()<<std::endl;
cv::Matimag=cv::Mat(512,512,CV_8U,pixData16);//
, element);
for(inti=0;i<100;i++)
{
cout<<*(pixData16+i)<<"
";
}
cv::imshow("image",imag);
cv::waitKey(0);
return0;
}
结果
上面编译使用的是64位库,32位库编译使用过程和64库一样。
百度网盘连接有VS2012 VS2013 32位 64位 Debug Release 库和测试用数据:
http://pan.baidu.com/s/1bpzZB4r r678
opencv库的安装使用请参见我的上一篇博文:http://blog.csdn.net/wanhongluli/article/details/77573854
相关文章推荐
- XMPP协议学习(4):使用开源jabber(XMPP)协议及openfire架设内部即时通讯服务
- XtraBackup - 开源MySQL在线热备份工具安装使用
- Bug Tacker .Net 缺陷跟踪开源系统 安装 使用指南
- OWASP开源项目WebGoat的安装使用方法
- http协议监测调试的“瑞士军刀” LiveHttpHeaders 安装使用教程
- LINUX开源监控平台Nagios(插件的安装和使用)
- 基于LGPL开源项目 Log4cpp安装与使用
- 3个开源TTS(一)——安装使用
- 基于LGPL开源项目 Log4cpp安装与使用
- 开源网页截屏工具 CutyCapt Linux 下安装和使用
- Bug Tacker .Net 缺陷跟踪开源系统 安装 使用指南
- 如何在iOS中使用ZXing库(ZXing是一个开源的条码生成和扫描库,开源协议为Apache2.0。它持众多条码格式和语言,比如Java、 C++、 C#、 Objective-C以及Act )
- 基于LGPL开源项目 Log4cpp安装与使用
- 基于LGPL开源项目 Log4cpp安装与使用
- [转]微软:因触犯开源协议撤下Win 7上网本安装工具
- 使用DCMTK遍历读取DICOM文件所有Tag的方法
- 开源搜索引擎Nutch 0.9的安装使用
- linux下开源sip server : opensips 的安装+配置 +使用
- [转]存储也开源:FreeNAS 安装及使用初体验
- F#的编译器及标准库使用Apache 2.0协议开源(暂时还没有看到未来)