您的位置:首页 > 其它

dicom协议开源库DCMTK安装和使用

2017-08-31 14:01 225 查看
背景

        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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  开源 dicom dcmtk