DICOM笔记-使用cmake编译DCMTK

一、安装Cmake
你可以在这里:https://cmake.org/download/找到Cmake的安装程序,下载后按照提示把它装在自己的电脑上。
二、DCMTK的下载和编译
1.想编译肯定要先下载在源码
你可以在这里:https://dcmtk.org/dcmtk.php.en得到你想要的东西
下面两个选择,取其一;
在这里插入图片描述
还有这个:我使用了win32的库,所以下载了dcmtk-3.6.5-win32-support-MD-iconv-msvc-15.8.zip;
在这里插入图片描述
关于MD和MT的选择
在这里插入图片描述

2下载完成后就可以开始编译
1)解压:我把这几个解压到了相应的文件夹下,你可以参考我的设置方式:
在这里插入图片描述
dcmtk-3.6.5:放置的是dcmtk的源码;
dcmtk-3.6.5-win32-support-MD-iconv-msvc-15.8:是dcmtk-3.6.5-win32-support-MD-iconv-msvc-15.8.zip内容的解压文件夹;
dcmtk-install:是使用cmake后的vs工程所在文件夹;
out:是用来存放vs生成的lib和include等,提供外部使用的库文件;
编译步骤:
1.使用CMake生成DCMTK工程文件
2.解压下载的DCMTK源码包和支持库包
3.打开CMake 选择源代码路径和将要生成的代码路径
点击左下角Configure,在弹出对话框中选择对应的MS版本后Finish确认
在这里插入图片描述

在这里插入图片描述

出现下图,开始进行第一次的配置生成;
在这里插入图片描述

4.点完可能要跑很久,第一次要check很多东西,在跑完以后列表里应该是这样一片红。
在这里插入图片描述

CMAKE配置的修改:
在BUILD组中,勾选BUILD_SHARED_LIBS
在这里插入图片描述
由于下载的是MD的库;
所以在CMAKE组中,将使用到MTd和MT的地方,修改为MDd和MD;
在这里插入图片描述

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

CMAKE_INSTALL_PREFIX用来放置生成的dll或者lib以及include文件夹位置;
设置为:CMAKE_INSTALL_PREFIX E:/x-dcmtk/out
在DCMTK组中;
在这里插入图片描述

去掉DCMTK_OVERWRITE_WIN32_COMPILER_FLAGS勾选;
去掉DCMTK_WITH_DOXYGEN勾选;
在这里插入图片描述

需要勾选一下6个值;
DCMTK_WITH_OPENSSL
DCMTK_WITH_PNG
DCMTK_WITH_THREADS
DCMTK_WITH_TIFF
DCMTK_WITH_XML
DCMTK_WITH_ZLIB

WITH组中的黄色在这里插入图片描述
方框内,就是我们刚才下载的支持库(dcmtk-3.6.5-win32-support-MD-iconv-msvc-15.8.zip)要设置的地方了。CMake没有自动识别到路径,我们需要手动设置一下。
在这里插入图片描述

下载的支持库目录结构如下:
在这里插入图片描述

WITH组
WITH_LIBICONVINC
E:/x-dcmtk/dcmtk-3.6.5-win32-support-MD-iconv-msvc-15.8/libiconv-1.15
WITH_LIBPNGINC
E:/x-dcmtk/dcmtk-3.6.5-win32-support-MD-iconv-msvc-15.8/libpng-1.6.37
WITH_LIBTIFFINC
E:/x-dcmtk/dcmtk-3.6.5-win32-support-MD-iconv-msvc-15.8/libtiff-4.0.10
WITH_LIBXMLINC
E:/x-dcmtk/dcmtk-3.6.5-win32-support-MD-iconv-msvc-15.8/libxml2-iconv-2.9.9
WITH_OPENJPEGINC
E:/x-dcmtk/dcmtk-3.6.5-win32-support-MD-iconv-msvc-15.8/openjpeg-2.3.1
WITH_OPENSSLINC
E:/x-dcmtk/dcmtk-3.6.5-win32-support-MD-iconv-msvc-15.8/openssl-1.1.1d
WITH_ZLIBINC
E:/x-dcmtk/dcmtk-3.6.5-win32-support-MD-iconv-msvc-15.8/zlib-1.2.11

MT版本(需要下载对应MT包:dcmtk-3.6.5-win32-support-MT-iconv-msvc-15.8.zip)
WITH_LIBICONVINC
E:/x-dcmtk/dcmtk-3.6.5-win32-support-MT-iconv-msvc-15.8/libiconv-1.15
WITH_LIBPNGINC
E:/x-dcmtk/dcmtk-3.6.5-win32-support-MT-iconv-msvc-15.8/libpng-1.6.37
WITH_LIBTIFFINC
E:/x-dcmtk/dcmtk-3.6.5-win32-support-MT-iconv-msvc-15.8/libtiff-4.0.10
WITH_LIBXMLINC
E:/x-dcmtk/dcmtk-3.6.5-win32-support-MT-iconv-msvc-15.8/libxml2-iconv-2.9.9
WITH_OPENJPEGINC
E:/x-dcmtk/dcmtk-3.6.5-win32-support-MT-iconv-msvc-15.8/openjpeg-2.3.1
WITH_OPENSSLINC
E:/x-dcmtk/dcmtk-3.6.5-win32-support-MT-iconv-msvc-15.8/openssl-1.1.1d
WITH_ZLIBINC
E:/x-dcmtk/dcmtk-3.6.5-win32-support-MT-iconv-msvc-15.8/zlib-1.2.11

将这些支持库路径全部设置完成之后,应该如下图所示(每个人支持库存放路径有所不同,图中路径仅供参考,实际以自己的为准):
在这里插入图片描述

此时再次点击Configure,短暂的读条之后,列表应该全都变成白色,检查先前做过的改动是否依然保留,如果路径和勾选项依然保留,说明设置已经成功,点击Generate就可以生成工程文件了。
仍然有红色:
在这里插入图片描述

将USE_COMPILER_HIDDEN)VISBILITY勾选去掉;
再次点击Configure;显示Configuring done,列表全都变成白色,检查先前做过的改动是否依然保留,如果路径和勾选项依然保留,说明设置已经成功;
在这里插入图片描述

点击Generate就可以生成工程文件
在这里插入图片描述

至此,CMake上的工作就全部结束了,可以关闭CMake进行后续操作。
在CMAKE上点击“Open Project”按钮或者在E:\x-dcmtk\dcmtk-install文件夹下找到DCMTK.sln,双击,打开vs2017项目工程;
在这里插入图片描述
显示VS界面在这里插入图片描述

然后随便在一个项目上右击->属性->常规->字符 集查看字符集是否为多字节字符集
在这里插入图片描述

同时在 C/C++ -->代码生成下查看运行库是否为 MDd
在这里插入图片描述

在左侧解决方案资源管理器中选择ALL_BUILD右击重新生成;开始编译;
也可以使用批处理,同时生产Debug库和Release库;
在这里插入图片描述
如果一切正常的话,会出现下图
在这里插入图片描述
选择在这里插入图片描述INSTALL,右击重新生成;
在这里插入图片描述

在对应的CMAKE_INSTALL_PREFIX文件夹路径内生成文件;
在这里插入图片描述

DCMTK的web资料:https://support.dcmtk.org/docs/;
附一张lib依赖关系图,之后遇到具体问题不用全数添加,选择需要的以及其依赖即可
在这里插入图片描述
在“C/C++”->“附加包含目录”中增加下面内容(前提示将dcmtk的库放在了解决方案文件夹下面)或者是dcmtk的include文件夹所在的位置:

$(SolutionDir)lib\dcmtk\Debug\include;

在这里插入图片描述
在“链接器”->“常规”->“附加库目录”中,增加下面内容或者是dcmtk的lib所在文件夹路径;

$(SolutionDir)lib\dcmtk\Debug\lib

在这里插入图片描述

将下面字符写入“链接器”->“输入”->“附加依赖项”中;
在这里插入图片描述

charls.lib
cmr.lib
dcmdata.lib
dcmdsig.lib
dcmfg.lib
dcmimage.lib
dcmimgle.lib
dcmiod.lib
dcmjpeg.lib
dcmjpls.lib
dcmnet.lib
dcmpmap.lib
dcmpstat.lib
dcmqrdb.lib
dcmrt.lib
dcmseg.lib
dcmsr.lib
dcmtls.lib
dcmtract.lib
dcmwlm.lib
i2d.lib
ijg12.lib
ijg16.lib
ijg8.lib
oflog.lib
ofstd.lib
#include "dcmtk\config\osconfig.h"
#include "dcmtk\dcmdata\dctk.h"
#include <iostream>

void main() 
{
    DcmFileFormat *myFileFormat = new DcmFileFormat;
    OFCondition cond = myFileFormat->loadFile("c:/111.dcm");
    if (cond.good())
    {
        OFString patientName;
        if (myFileFormat->getDataset()->findAndGetOFString(DCM_PatientName, patientName).good()) 
            std::cout << "Patient Name: " << patientName << "\nTest successed.\n";
        else std::cout << "No Patient Name Data!\n";
    }
    else std::cout << "Error occurs when opening file, check path or filename.\n";
    system("pause");
}

注意:
MT方式集成dcmtk时;
Dcmtk中使用了一些外部的lib,MT需要将使用lib加入链接器中;
error LNK2019: 无法解析的外部符号 _GetAdaptersInfo@8,该符号在函数 _wmain 中被引用
#pragma comment(lib, “Iphlpapi.lib”)

遇到的问题

有朋友在按照我的笔记实现时,出现了
在这里插入图片描述
使用以下代码可以解决:

#pragma comment(lib, "ws2_32.lib")      // 包含socket,因为.dcm图像包含网络通信协议
#pragma comment(lib,"iphlpapi.lib")
#pragma comment(lib, "netapi32.lib")

最后附加上我编译可以正常使用的3.6.6的库,如果失效可以评论;
链接:https://pan.baidu.com/s/1ihvKicx8KgN_YqsiSbxsSw
提取码:mw4i

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论
### 回答1: DICOMweb是一个用于医学影像数据传输和交换的标准协议,它基于Web技术,并且可以通过HTTP协议在网络上传输DICOM图像和相关信息。dicomweb-client是一个用于访问DICOMweb服务的客户端工具。下面是关于dicomweb-client的简单教程。 首先,为了使用dicomweb-client,我们需要安装Node.js运行环境。Node.js是一个基于Chrome V8引擎的JavaScript运行环境,它可以让我们在命令行中运行JavaScript脚本。 安装完成后,我们需要使用npm(Node.js的包管理器)来安装dicomweb-client。在命令行中运行以下命令: ``` npm install dicomweb-client ``` 安装完成后,我们可以在JavaScript脚本中使用dicomweb-client来访问DICOMweb服务。首先,我们需要导入dicomweb-client模块: ```javascript const { DICOMwebClient } = require('dicomweb-client'); ``` 然后,我们可以实例化一个DICOMwebClient对象来连接DICOMweb服务器: ```javascript const client = new DICOMwebClient({ url: 'http://your_dicomweb_server_url', }); ``` 接下来,我们可以使用DICOMwebClient对象的方法来执行各种操作。例如,我们可以使用retrieveStudies方法来检索指定患者的研究(study)列表: ```javascript client.retrieveStudies({ queryParams: { PatientID: '1234567890', }, }).then((result) => { console.log(result); }).catch((error) => { console.error(error); }); ``` 这样,我们就可以通过DICOMweb服务检索患者的研究列表,并将结果打印到控制台。 除了检索研究,dicomweb-client还提供了其他功能,如检索系列(series)、检索图像(instance)等。 综上所述,dicomweb-client是一个使用Node.js的DICOMweb客户端工具,它使我们能够通过HTTP协议访问DICOMweb服务,并执行各种操作。通过掌握dicomweb-client的使用,我们可以方便地处理和交换医学影像数据。 ### 回答2: DICOMweb-client是一个用于访问和获取医学图像和信息通信的开源工具。它是一个基于Web的应用程序,可以通过HTTP协议与DICOMweb服务器进行通信,并在浏览器中显示和处理医学影像数据。 Dicomweb-client提供了一套简单易用的API,使开发人员可以轻松地将医学图像集成到自己的应用程序中。使用该工具,用户可以实现DICOM图像的检索、显示、存储和传输等各种功能。 Dicomweb-client的使用教程分为以下几个主要部分: 1. 环境设置:首先,我们需要在本地环境中安装和配置dicomweb-client。这包括安装Node.js和NPM,下载dicomweb-client的代码,并进行一些配置。 2. 连接DICOMweb服务器:在这一步中,我们需要将dicomweb-client配置为连接到相应的DICOMweb服务器。这包括指定服务器的地址、端口号和遵循的DICOMweb协议版本。 3. DICOM图像的检索:通过dicomweb-client,我们可以使用DICOMweb协议实现对DICOM图像的检索。用户可以根据各种检索条件(如患者ID、日期、模态等)来搜索和获取特定的图像数据。 4. 图像显示和处理:一旦我们成功检索到DICOM图像,我们可以使用dicomweb-client在浏览器中显示这些图像。它提供了图像浏览和操作的功能,比如放大、缩小、旋转和窗宽窗位等。 5. 图像的存储和传输:通过dicomweb-client,我们可以将图像数据存储到本地系统中,或者将其传输到其他DICOMweb服务器。这使得我们可以方便地在不同的系统之间共享和交换医学影像数据。 总而言之,dicomweb-client教程提供了一个指导开发人员使用DICOMweb协议访问和处理医学图像的步骤。它使得开发者能够更加轻松地集成DICOM图像到自己的应用程序中,并实现各种图像处理和数据传输的功能。 ### 回答3: dicomweb-client是一个用于与DICOM Web服务器进行通信的工具。它用于检索、存储和传输医学图像和相关信息。 dicomweb-client教程可以帮助用户学习如何使用dicomweb-client工具与DICOM Web服务器进行交互。教程通常会涵盖以下内容: 1. 安装和配置dicomweb-client:教程将提供如何下载、安装和配置dicomweb-client工具的详细说明。这包括设置所需的环境变量、配置文件和认证信息等。 2. 连接DICOM Web服务器:教程将介绍如何使用dicomweb-client建立与DICOM Web服务器的连接。这可能涉及到输入服务器的URL、端口号和身份验证凭据等。 3. 检索医学图像和相关信息:教程将演示如何使用dicomweb-client从DICOM Web服务器检索医学图像和相关信息。这可能包括指定检索条件、过滤结果和处理返回的数据等。 4. 存储医学图像和相关信息:教程将展示如何使用dicomweb-client将医学图像和相关信息存储到DICOM Web服务器。这可能涉及到指定存储位置、格式转换和处理存储结果等。 5. 其他功能和高级用法:教程还可能介绍其他功能和高级用法,如显示DICOM图像、处理DICOM标记、执行DICOM操作和导出数据等。 通过学习dicomweb-client教程,用户可以更好地理解和使用dicomweb-client工具,从而更有效地与DICOM Web服务器进行交互,并在医学图像和相关信息的处理和传输方面取得良好的结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黑山老妖的笔记本

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值