技术标签: C++ 医学物理 qt DCMTK IT visual studio
本文主要介绍VS中如何配置和使用DCMTK库,也会提及qt,没有详细介绍VS和cmake等工具的安装,因为这都不会的话,也没必要再学了。本人用的电脑是x86_64,编译只讲32位的,64位同理。
DCMTK是一个功能强大针对医学图像处理、通讯的开源库,主要面向C++语言。本人最近在做一个项目,项目需求是跨平台、C++编程,所以就选用了DCMTK库作为工具,由于编程基础薄弱,在该库的配置过程中遇到很多障碍,这里把其中的经验总结下来,供需要的人参考。大神绕路,不喜也勿喷。
下载VS2015,我之前用的是社区版,后来用的企业版,对DCMTK库都没问题,这里是下载网站,请自行安装。如果要在VS中建立QT项目的话需要安装QT下载地址,及QTPackage下载地址.
下载DCMTK3.6.1版本源代码并解压,下载地址或下载地址
下载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并导入项目
上一步只是对DCMTK库编译了下,并没有安装,如图所示,在VS2015菜单栏中点击 生成->批生成,选中ALL_BUILD Debug Win32然后点击生成,完了选中INSTALL中的对应选项,点击生成,生成完毕没报错(warning不用管)就可以用了,如果有报错,重复前面步骤检查错误。
如果成功的话在cmake gui界面CMAKE_INSTALL_PREFIX设置的目录下会有include、lib、bin等目录,大小几百M,release版本和debug大小不同;
建立一个空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什么不符的,就是用的库类型和设置的库类型不符,看文章最后库类型的介绍,一定要一致才能用;
你可能疑惑,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
看看是不是可以用了呢,如果不行,继续慢慢折腾吧!
MD动态链接库release版本
MT静态链接库release版本
MDd动态链接库debug版本
MTd静态链接库debug版本
动态链接库:顾名思义动态地调用库链接,程序编译生成的exe文件比较小,执行的时候调用所用到的库,如果换个环境这个exe文件就执行不了了,也就是我们常见的程序缺少…,或者直接内存什么鬼的出问题直接挂掉。有点是改动库的话程序不用重新编译,exe文件比较小,缺点是移植到别的电脑的话需要把所依赖的库一起整理打包。
静态链接库:与动态链接库相对,编译时候编译器把库中用到的的函数编译一起到可执行程序,程序移植方便,但是文件较大,如果修改需要重新编译。
Linux下库的编译也用cmake,操作方法跟Windows下相同。如果你在Windows下折腾熟了,Linux下也是一样的,在这里我也懒得多说了,在linux下qt中的配置跟Windows下qt的配置类似,去掉几个windows下特有的lib即可,我自己试过,没啥问题,这里贴个我在linux下的pro文件的配置;
文章浏览阅读288次。文章目录[隐藏]资源工具安装使用 RAID 可以提高服务器的性能。不同 RAID 的级别,性能会有所不同。它通过容错和高可用性来保存我们的数据。下面记录在linux上配置和使用raid卡的过程。资源Linux主机Raid卡(LSI MegaRAID SAS 9271-8i)两块希捷1T机械硬盘工具Raid工具:MegaCli64或storcli64fdisk(分区)mkfs(格式化分区文件系统)d..._提高raid 4k性能
文章浏览阅读458次。加入2021湖南事业单位学习Q群获取资料,群号:709010555 计算机——操作系统1、进程管理为了提高CPU的利用率而采用多道程序技术。通过进程管理来协调多道程序之间的关系,使CPU得到充分的利用。2、并发控制并发控制指的是当多个用户同时更新运行时,用于保护数据库完整性的各种技术。3、死锁死锁,是指多个进程因竞争资源而造成的一种僵局,若无外力作这些进程都将永远不能再向前推进。产生死锁的原...
文章浏览阅读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..._格式化为纳秒
文章浏览阅读753次。最近一直碰到苹果的内存释放的问题:ViewController关闭后没有被释放,导致内存噌噌的上涨,于是检查发现存在以下问题1、ViewController和TableCell互相之间strong引用2、ViewController和delegate互相之间strong引用这些都会导致很严重的ViewController内存泄露,解决方法是第一:ViewController已经_zzphotolistviewcontroller出现 内存泄漏啦
文章浏览阅读2.1k次。logrotate 程序是一个日志文件管理工具。用来把旧的日志文件删除,并创建新的日志文件,我们把它叫做“转储”。我们可以根据日志文件的大小,也可以根据其天数来转储,这个过程一般通过 cron 程序来执行安装后系统会定时运行logrotate,一般是每天一次。系统是这么实现按天执行的。crontab会每天定时执行/etc/cron.daily目录下的脚本,而这个目录下有个文件叫logrotate。在centos上脚本内容是这样的:/usr/sbin/logrotate /etc/logrotate.co_logrotate按天切割日志
文章浏览阅读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中有两个文本框
文章浏览阅读1k次。springboot版本 和 elasticsearch版本 对应关系_elasticsearch8.10.2对应springboot版本
文章浏览阅读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
文章浏览阅读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
文章浏览阅读2.5k次,点赞3次,收藏16次。Oracle Awr报告分析-细节内容衔接细节剖析SQL Statistic分析ASH Report分析分析结论内容衔接在进行Oracle Awr报告分析中,我们的分析思路是先总后分。先从Awr的总览信息中,分析系统的负载、数据库繁忙程度、严重的等待事件等,再从具体的事务入手分析。在上一篇文章Oracle Awr报告分析-总览,我们分析得出如下结论:CPU利用率超过100%,说明出现了等待事件;数据库非常繁忙,数据变更频率快,每秒产生日志量达到27M;数据库软解析非常高,达到了100%;主要_oracle中arw报告分析
文章浏览阅读5.9k次。在springmvc中实现国际化的步骤1、编写国际化配置文件,我们将要显示的内容都配置出来;2、使用resourcebundlemessagesource来管理国际化资源文件;3、如果是以前的jsp页面,可以使用fmt:message来取出国际化的内容;springboot的配置抽取页面需要显示的国际化消息;示例:在登录页面进行国际化的配置;login.properitieslogin.tip=请登录~login.username=用户名~login_en_US.
文章浏览阅读8.1k次。首先声明,看清题目,是VS2012(或更低版本),缺少的是MSVCP120D.dll,至于原因,后面说。当然,其余的VS和缺少其余的dll也可以参考1. 问题原因这个很重要,很多网上的解决方案都是找个vcredist_x86之类的C++运行库安装一下,有的还直接下载MSVCP120D.dll,将其拖入系统文件夹再进行regsvr32命令操作之类的.....这些方案至少对于我的问题是_opencv msvcp120d.dl