DCMTK in VS2015_vs2015 dcmtk 例程-程序员宅基地

技术标签: C++  医学物理  qt  DCMTK  IT  visual studio  

 本文主要介绍VS中如何配置和使用DCMTK库,也会提及qt,没有详细介绍VS和cmake等工具的安装,因为这都不会的话,也没必要再学了。本人用的电脑是x86_64,编译只讲32位的,64位同理。

 DCMTK是一个功能强大针对医学图像处理、通讯的开源库,主要面向C++语言。本人最近在做一个项目,项目需求是跨平台、C++编程,所以就选用了DCMTK库作为工具,由于编程基础薄弱,在该库的配置过程中遇到很多障碍,这里把其中的经验总结下来,供需要的人参考。大神绕路,不喜也勿喷。

1 VS2015的安装

 下载VS2015,我之前用的是社区版,后来用的企业版,对DCMTK库都没问题,这里是下载网站,请自行安装。如果要在VS中建立QT项目的话需要安装QT下载地址,及QTPackage下载地址.

2 下载DCMTK库

 下载DCMTK3.6.1版本源代码并解压,下载地址下载地址

3 安装cmake并编译DCMTK库

 下载cmake3.8.0并安装,下载地址,打开cmake gui,如图所示:

  • 在1中输入解压的位置,2中为自己新建的文件夹;

  • 点击configure(耗时比较久,第一次使用时候会弹出选择工具,选择VS 14 2015即可),然后出现如图所示红色状态;

  • 在CMAKE_INSTALL_PREFIX中修改安装位置(建议不在C盘,因为在C盘的话有时候需要管理员权限,比较麻烦);

  • 在CMAKE_CXX_FLAGS_…中修改库类型,MD-动态链接库releae版本,MDd动态链接库debug版本,MT静态链接库release版本,MTd静态链接库debug版本,这里暂不做修改;(默认动态链接库,由于我的项目用了qt做界面,而直接安装的qt默认是动态库,为了匹配,我就没做修改)

  • 如果后面想安装release版本的话,注意把CMAKE_OVERWRITE_WIN32_COMPILER的选中取消(在stack overflow看到的,亲测有效);

  • 点击generate生成项目,然后点击open即可打开VS2015并导入项目

4 使用VS2015构建并安装DCMTK库

 上一步只是对DCMTK库编译了下,并没有安装,如图所示,在VS2015菜单栏中点击 生成->批生成,选中ALL_BUILD Debug Win32然后点击生成,完了选中INSTALL中的对应选项,点击生成,生成完毕没报错(warning不用管)就可以用了,如果有报错,重复前面步骤检查错误。

如果成功的话在cmake gui界面CMAKE_INSTALL_PREFIX设置的目录下会有include、lib、bin等目录,大小几百M,release版本和debug大小不同;

5 建立VS项目测试

 建立一个空C++项目,然后设置相关项,注意debug模式和release模式,两个的设置方法一样,但用哪个设置哪个,两个都用就都设置(前提是你的两种DCMTK库你都成功安装了):

  • 右键项目->属性->C/C++->代码生成->运行库MDd (因为默认的debug模式,我们就先按照这个来)

  • 右键项目->属性->C/C++->附加包含目录,加入前面库的安装目录下的include目录,我的是,D:\DCMTK\MDd\include

  • 右键项目->属性->链接器>附加库目录,加入前面库的安装目录下的lib目录,D:\DCMTK\MDd\lib

  • 右键项目->属性->链接器>依赖项,加入以下内容:

        kernel32.lib
        user32.lib
        gdi32.lib
        winspool.lib
        shell32.lib
        ole32.lib
        oleaut32.lib
        uuid.lib
        comdlg32.lib
        advapi32.lib
        dcmdata.lib
        oflog.lib
        ofstd.lib
        ws2_32.lib
        netapi32.lib
        wsock32.lib
        dcmimgle.lib
        dcmimage.lib
        dcmrt.lib

 输入代码测试,在主文件中写如下代码:

   #include<iostream>
    #include "dcmtk/config/osconfig.h"
    #include "dcmtk/dcmdata/dctk.h"
    using namespace std;
    int main()
    {
        DcmFileFormat fileformat;
        OFFilename="test.dcm";//这里改为你的dcm文件
        OFCondition status = fileformat.loadFile(OFFilename);
        DcmDataset *dataset = fileformat.getDataset();
        OFString PatientName;
        dataset->findAndGetOFString(DCM_PatientName, PatientName);
        cout<<PatientName;
        system("pause");
        return 0;
    }

 如果这里运行没问题的话,说明库安装成功(当然也可能存在小瑕疵,但整体没错,即便有问题,多折腾几次就好了,我都折腾了十七八回了,人生苦短,贵在折腾啊);

折腾时候可能遇到的问题:

  • 1 一大堆的link错误,一般是链接器中lib文件的顺序或者缺少某lib文件,或者库根本没编译好;

  • 2 **log错误,就是traclog或者什么,错误文件名中含log,找到该文件,把报错的几行给注释掉即可;

  • 3 MTd与MDd什么不符的,就是用的库类型和设置的库类型不符,看文章最后库类型的介绍,一定要一致才能用;

6 QT中测试

 你可能疑惑,bb了这么久,说好的qt呢,其实库编译好qt就是能用的,在qt下建立个项目,贴上上面代码,在pro文件里添加如下代码:

      DCMTK=$$quote("D:/DCMTK/MDd")
        DCMTK_INCLUDE=$$DCMTK"\include"
        INCLUDEPATH +=  $$DCMTK_INCLUDE
        LIBS+= -L$$quote("D:/DCMTK/MDd/lib/")
        LIBS += -lkernel32 \
        -luser32 \
        -lgdi32 \
        -lwinspool \
        -lshell32 \
        -lole32 \
        -loleaut32 \
        -luuid \
        -lcomdlg32 \
        -ladvapi32 \
        -ldcmdata \
        -loflog \
        -lofstd \
        -lws2_32 \
        -lnetapi32 \
        -lwsock32 \
        -ldcmimgle \
        -ldcmimage \
        -ldcmrt

 看看是不是可以用了呢,如果不行,继续慢慢折腾吧!


注意事项

1 这里再重新介绍下动态链接库和静态链接库:

        MD动态链接库release版本
        MT静态链接库release版本
        MDd动态链接库debug版本
        MTd静态链接库debug版本
  • 动态链接库:顾名思义动态地调用库链接,程序编译生成的exe文件比较小,执行的时候调用所用到的库,如果换个环境这个exe文件就执行不了了,也就是我们常见的程序缺少…,或者直接内存什么鬼的出问题直接挂掉。有点是改动库的话程序不用重新编译,exe文件比较小,缺点是移植到别的电脑的话需要把所依赖的库一起整理打包。

  • 静态链接库:与动态链接库相对,编译时候编译器把库中用到的的函数编译一起到可执行程序,程序移植方便,但是文件较大,如果修改需要重新编译。

2 Linux下使用

 Linux下库的编译也用cmake,操作方法跟Windows下相同。如果你在Windows下折腾熟了,Linux下也是一样的,在这里我也懒得多说了,在linux下qt中的配置跟Windows下qt的配置类似,去掉几个windows下特有的lib即可,我自己试过,没啥问题,这里贴个我在linux下的pro文件的配置;

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ancewer/article/details/74408441

智能推荐

raid卡 4k 设置 linux,Linux上Raid卡的简单配置与使用-程序员宅基地

文章浏览阅读288次。文章目录[隐藏]资源工具安装使用 RAID 可以提高服务器的性能。不同 RAID 的级别,性能会有所不同。它通过容错和高可用性来保存我们的数据。下面记录在linux上配置和使用raid卡的过程。资源Linux主机Raid卡(LSI MegaRAID SAS 9271-8i)两块希捷1T机械硬盘工具Raid工具:MegaCli64或storcli64fdisk(分区)mkfs(格式化分区文件系统)d..._提高raid 4k性能

国家电网计算机操作,2018年国家电网考试备考计算机之操作系统-程序员宅基地

文章浏览阅读458次。加入2021湖南事业单位学习Q群获取资料,群号:709010555 计算机——操作系统1、进程管理为了提高CPU的利用率而采用多道程序技术。通过进程管理来协调多道程序之间的关系,使CPU得到充分的利用。2、并发控制并发控制指的是当多个用户同时更新运行时,用于保护数据库完整性的各种技术。3、死锁死锁,是指多个进程因竞争资源而造成的一种僵局,若无外力作这些进程都将永远不能再向前推进。产生死锁的原...

java 纳秒 格式化_Java8生成时间方式以及格式化时间-程序员宅基地

文章浏览阅读2.8k次。LocalDate类第一种:直接生成当前时间LocalDate date = LocalDate.now();System.out.println(date);结果:2020-08-20第二种:使用 LocalDate.of 构建时间LocalDate date = LocalDate.now();date = LocalDate.of(2020, 9, 20);System.out.printl..._格式化为纳秒

ios内存泄露的问题_zzphotolistviewcontroller出现 内存泄漏啦-程序员宅基地

文章浏览阅读753次。最近一直碰到苹果的内存释放的问题:ViewController关闭后没有被释放,导致内存噌噌的上涨,于是检查发现存在以下问题1、ViewController和TableCell互相之间strong引用2、ViewController和delegate互相之间strong引用这些都会导致很严重的ViewController内存泄露,解决方法是第一:ViewController已经_zzphotolistviewcontroller出现 内存泄漏啦

linux 按天切割日志(logrotate)_logrotate按天切割日志-程序员宅基地

文章浏览阅读2.1k次。logrotate 程序是一个日志文件管理工具。用来把旧的日志文件删除,并创建新的日志文件,我们把它叫做“转储”。我们可以根据日志文件的大小,也可以根据其天数来转储,这个过程一般通过 cron 程序来执行安装后系统会定时运行logrotate,一般是每天一次。系统是这么实现按天执行的。crontab会每天定时执行/etc/cron.daily目录下的脚本,而这个目录下有个文件叫logrotate。在centos上脚本内容是这样的:/usr/sbin/logrotate /etc/logrotate.co_logrotate按天切割日志

窗体上有两个文本框:一个文本框中最多输入字符6个;一个文本框中输入任何内容都显示*号。再添加一个按钮、2个单选按钮。实现单击按钮后,根据单选按钮,将对应文本框中内容显示在标签_窗体characters中有两个文本框-程序员宅基地

文章浏览阅读1w次。using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;name_窗体characters中有两个文本框

随便推点

springboot 和 elasticsearch 版本对应关系_elasticsearch8.10.2对应springboot版本-程序员宅基地

文章浏览阅读1k次。springboot版本 和 elasticsearch版本 对应关系_elasticsearch8.10.2对应springboot版本

怎么用网页进入mysql,通过页面打开mysql连接完全鲁ck吗?-程序员宅基地

文章浏览阅读100次。When querying the db is it plausible to feel extremely paranoid? I go as far as opening and closing mysql connection every time a new query has to be done. I am afraid that (especially with the ajax e..._用网页怎么打开mysql

c语言采用解释方式将源程序转换为,C语言采用解释方式将源程序转换为二进制的目标代码。()...-程序员宅基地

文章浏览阅读600次。C语言采用解释方式将源程序转换为二进制的目标代码。()更多相关问题【单选题】广播电视新闻应当遵守的原则是()A. 自由平等B. 公开公平C. 真实公正D. 效率原则【问答题】简述ZHDQ—32/10型水电解制氢装置在启动过程中,系统的压力、温度及碱液循环流量等参数的调节与控制。【单选题】系统性红斑狼疮患者发生口腔真菌感染时,可选用的漱口液为()A. 1%~4%碳酸氢钠溶液B. 2%~3%硼酸溶液C..._it will be requested that he his homework this afternoon

Oracle Awr报告分析-细节_oracle中arw报告分析-程序员宅基地

文章浏览阅读2.5k次,点赞3次,收藏16次。Oracle Awr报告分析-细节内容衔接细节剖析SQL Statistic分析ASH Report分析分析结论内容衔接在进行Oracle Awr报告分析中,我们的分析思路是先总后分。先从Awr的总览信息中,分析系统的负载、数据库繁忙程度、严重的等待事件等,再从具体的事务入手分析。在上一篇文章Oracle Awr报告分析-总览,我们分析得出如下结论:CPU利用率超过100%,说明出现了等待事件;数据库非常繁忙,数据变更频率快,每秒产生日志量达到27M;数据库软解析非常高,达到了100%;主要_oracle中arw报告分析

springboot实现国际化案例(全)-程序员宅基地

文章浏览阅读5.9k次。在springmvc中实现国际化的步骤1、编写国际化配置文件,我们将要显示的内容都配置出来;2、使用resourcebundlemessagesource来管理国际化资源文件;3、如果是以前的jsp页面,可以使用fmt:message来取出国际化的内容;springboot的配置抽取页面需要显示的国际化消息;示例:在登录页面进行国际化的配置;login.properitieslogin.tip=请登录~login.username=用户名~login_en_US.

VS2012运行opencv程序时缺少MSVCP120D.dll_opencv msvcp120d.dl-程序员宅基地

文章浏览阅读8.1k次。首先声明,看清题目,是VS2012(或更低版本),缺少的是MSVCP120D.dll,至于原因,后面说。当然,其余的VS和缺少其余的dll也可以参考1. 问题原因这个很重要,很多网上的解决方案都是找个vcredist_x86之类的C++运行库安装一下,有的还直接下载MSVCP120D.dll,将其拖入系统文件夹再进行regsvr32命令操作之类的.....这些方案至少对于我的问题是_opencv msvcp120d.dl

推荐文章

热门文章

相关标签