QtCreator或VS2013下VTK与ITK环境搭建教程

更新时间:2024-03-27 13:21:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

QtCreator或VS2013下VTK与ITK环境搭建教程

孙宇 rain.sunn@foxmail.com 2015.11.11

中科院深圳先进技术研究院

小编为了跟随时代潮流,所有版本都选择了最新的:VTK6.3,ITK4.8,Qt5.5及VS2013旗舰版Update5,其实啥版本都一样,过程都是一样的!顺便说下CMake3.4以及openCV3.0以及一个TCP通信用的OpenIGTLink!

把该下载的下载了,去官网下就好,下面一个一个说!

FIRST: VS2013

啥也不说了,在ITELLYOU上下载安装即可:http://msdn.itellyou.cn/ VS2013本体:

ed2k://|file|cn_visual_studio_ultimate_2013_x86_dvd_3175316.iso|3077509120|ADDA34B2BC29E1571276AE50A220EB91|/ VS2013 Update5升级包:

ed2k://|file|cn_visual_studio_ultimate_2013_with_update_5_x86_dvd_6816649.iso|5567336448|641555AD6472A98923B29CC5E371461E|/

可能会有很多人问为啥非得用最新版啊,编译的库别的地方都用不了!好吧,萝卜白菜各有所爱,小编我不是慈善机构,不指望别的单位沿用我的代码,我选择新版是因为新版本编译时候不会发生各种各样的小BUG(是不是颠覆了一些人的认知?嘿嘿),而且最最最重要的是ITK对编译器的支持是有时限的,08版的快不被支持了。

SECOND: QT5.5

为啥把QT放前面呢,因为其它库编译时候会选择是否依赖它,所以要放第一个!QT常用的有Creator和VS集成版,对编译的库来说安啥都一样。小编我喜欢轻量级的IDE,所以以集成有VS版编译器的Creator为例进行说明。

最方便的安装当然是online安装包:http://www.qt.io/cn/download-open-source/ 直接下载了,点开运行,注册个免费账号后出现下面的界面

如图,把Qt5.5选中,其中Mingw和VS的编译器都勾选上,Tools中的Mingw也勾上后其

它保持默认即可(小编把QT的云服务也勾上了,个人需求而已),一路安装至结束;当然下载离线安装包也是可以的,安装后运行目录中的MaintenanceTool.exe选择添加删除功能后也会出现这个界面。

配置QT到VS的IDE上,还需要额外安装一个插件:Visual Studio Add-in xxx for Qt5,在 http://www.qt.io/cn/download-open-source/ 这个网页中“其它下载”栏目里。 然后在VS中配置QT5 - Qt Options - Add,添加QT5的如图安装目录:

THIRD: SDK8.1

为啥要安这个呢,因为VS的编译器只对应Creator的release,而Creator的debug需要用到这个SDK里的Debugging Tools for Windows(安装时只勾选这项即可) SDK:https://msdn.microsoft.com/en-us/windows/desktop/bg162891.aspx

FOURTH: VTK6.3

VTK这东西呢,属于比较底层的库了,编译openCV和ITK的时候都有是否编译VTK链接模块的选项,所以先装它!(如果用PYTHON的话,那在VTK之前要先装PYTHON) VTK:http://www.vtk.org/download/

需要哪个版本就下载哪个,小编下的最新的6.3,需要用到 VTK源文件:VTK-6.3.0.zip

VTK数据文件:VTKData-6.3.0.zip (不编例子的话可以不下载)

小编做了很整齐的目录名!很赞吧!将源文件解压至VTK-src中,数据文件解压至VTK-dat中,然后新建两个目录VTK-bin和VTK-res,以后再说有啥用!

打开CMAKE3.4然后把source code和binaries的路径敲上去,点击Configure如图所示:

不要问我为啥选的32位的编译器,因为我们中心的电脑很渣,都是32的!推荐用64位!看到了没,新版VTK配置后是不是比老版的好多了!

按需求决定是否勾选EXAMPLES和TESTING(新手的话还是勾上比较好,如果勾上就需要指定VTK-dat路径),然后把里面的CMAKE_INSTALL_PREFIX的路径改成VTK-res那个目录,下面的VTK_Group_Qt给勾选上,然后继续点Configure:

它可能会跳出来如图的错误!不要担心!只是CMAKE没找到目录而已

手动指定目录和QT的版本后重新Configure一下就好了,如果用的是64位的编译器,那qmake.exe要选择成msvc2013_64那个目录下的,同理Mingw。然后我们会惊奇的发现,它丫的又出错了!这次是Qt5的目录没找到!

看到了吧,就是这个文件所在的文件夹没找到,手动指定下这个文件的目录如图所示。其中64位或Mingw的话同上所述,选择不同文件夹下的目录。之后应该就没有问题了!文本框中最后一行会出现Configuring done的字样,你点击下Generate就好了。进入你之前的VTK-bin目录,双击VTK.sln运行,选中ALL_BUILD后按F7开始编译。等待过程中可以去喝杯热咖啡,与好基友聊聊QQ啥的~别被领导发现!

放心吧,编译不会失败的,失败的话小编我活吞仓鼠!编译好后右键单击INSTALL选择仅用于项目 - 仅生成INSTALL,这样VTK所有需要的lib和dll及其它相关文件就全都自动复制到VTK-res目录下了!

将VTK-res目录下的bin文件夹路径添加到系统的Path环境变量中,不会自己百度!

至此VTK的编译结束了!感谢祖国!感谢人民!感谢CCTV!感谢胡老大! 顺便一说,下面这两个库的下载地址:

openCV是图像处理的集大成者:http://opencv.org/downloads.html

openIGTLink是医疗影像通信的常用协议:http://openigtlink.org/library.html 以及下面是关于openIGTLink的使用教程(大师级代码,小白级操作) http://www.na-mic.org/Wiki/index.php/OpenIGTLink/Library/Tutorial

FIFTH: ITK4.8

在这之前强烈建议先编译一下openCV3.0和openIGTLink,这里就不详细说了,因为主题只是VTK和ITK的编译,做图像处理openCV是必不可少的!交互的话通信也是必须的! ITK:http://www.itk.org/ITK/resources/software.html

需要哪个版本就下载哪个,小编下的最新的4.8,需要用到 ITK源文件:InsightToolkit-4.8.1.zip

ITK数据文件:InsightData-4.8.1.zip (不编例子的话可以不下载)

同样先来一张文件夹全家福!这里不啰嗦了,和VTK那个是一样一样一样的!唯一需要注意的是,CMAKE用的编译器不要换!要不然可能会出问题!比如VTK用的32位VS,编ITK时也要用32位VS,小朋友们,记住了吗?

连续多次的Configure过程中可能出现如下错误及其解决方法,其中一下列出的部分项需要启用CMAKE的Grouped和Advanced选项才能看到详细信息: BUILD_EXAMPLES 这个不要选,之后我会解释为什么 BUILD_SHARED_LIBS 这个要勾选上

CMAKE_INSTALL_PREFIX 路径改成你的ITK-res 想要结合OpenCV或VTK做项目的话建议勾选:

Module_ITKVideoBridgeOpenCV(电脑中需安装有OpenCV)

Module_ITKV3Compatibility(同时需勾选ITKV3_COMPATIBILITY) Module_ITKVtkGlue(用于与VTK数据交互) 其他推荐模块建议勾选(需在电脑中配置git): Module_SmoothingRecursiveYvvGaussianFilter Module_SubdivisionQuadEdgeMeshFilter Module_VariationalRegistration

其它维持默认即可,如果有人很喜欢用DCMTK的话,那需要把这4个勾选上: Module_IOTransformDCMTK Module_ITKDCMTK Module_Deprecated Module_ITKIODCMTK

但是小编认为没必要这么做,因为我们已经用VTK了,DCMTK这部分在VTK里是有的!同VTK找到ITK.sln运行,并选中ALL_BUILD进行编译,编译后右键INSTALL进行安装和添加系统路径即可。PS:ITK的默认编译模块里包括一部分VTK的接口。

最后说下为什么不选择编译例子,因为编译好的例子在ITK的官网上都是能找到的,所以没必要费时编译它!

工程例子:http://itk.org/ITKExamples/src/Core/index.html 文档例子:http://itk.org/Doxygen48/html/examples.html 程序文档:http://www.itk.org/ItkSoftwareGuide.pdf

SIXTH: TEST

下面给出测试用代码,我是用Creator建立的工程: test.pro所在文件夹下建立Library文件夹,并在文件夹下建立两个txt文件,改名为LinkVTK和LinkITK,在两个文本文件里分别添加以下信息: #LinkVTK.pri:

INCLUDEPATH += D:/VTK6.3/VTK-res/include/vtk-6.3 LIBS += -LD:/VTK6.3/VTK-res/lib/ \\ -lvtkCommonCore-6.3 \\

-lxxxxxxxxxxxxxxxxxx

......

你懂的,小编我比较蠢,把所有的lib都链接上了,完整版后面放出,用VS编程的同学也是可以直接把所有的库都包含一下~自己改INCLUDEPATH的路径! #LinkITK.pri:

INCLUDEPATH += D:/ITK4.8/ITK-res/include/itk-4.8 LIBS += -LD:/ITK4.8/ITK-res/lib/ \\ -lITKCommon-4.8 \\

-lxxxxxxxxxxxxxxx

......

将两个txt扩展名改成pri并包含进工程中,在pro文件中添加: include(Library/LinkVTK.pri) include(Library/LinkITK.pri)

大功告成,下面放出测试代码: VTK部分:

test.h --------------------------------------------start #ifndef VTKFUNC_H #define VTKFUNC_H #include

#include

VTK_MODULE_INIT(vtkRenderingOpenGL) VTK_MODULE_INIT(vtkInteractionStyle)

class VTKFUNC : public QObject {

public:

explicit VTKFUNC(QObject *parent = 0); public:

QString getDICOMDir();

void readDICOMImage(QString imgDir); };

#endif // VTKFUNC_H

test.h --------------------------------------------end

test.cpp------------------------------------------start #include \

#include

#include

#include #include #include #include

#include #include #include

#include #include #include #include

VTKFUNC::VTKFUNC(QObject *parent) : QObject(parent) { }

QString VTKFUNC::getDICOMDir() {

return QFileDialog::getExistingDirectory(NULL, \}

void VTKFUNC::readDICOMImage(QString imgDir) {

typedef vtkSmartPointer SmartRenderer;

typedef vtkSmartPointer SmartRenderWindow;

typedef vtkSmartPointer SmartRenderWindowInteractor; SmartRenderer aRenderer = SmartRenderer::New();

SmartRenderWindow renWin = SmartRenderWindow::New();

renWin->AddRenderer(aRenderer);

SmartRenderWindowInteractor iren = SmartRenderWindowInteractor::New(); iren->SetRenderWindow(renWin); aRenderer->SetBackground(.2, .3, .4);

renWin->SetSize(640, 480);

typedef vtkSmartPointer SmartDICOMImageReader; SmartDICOMImageReader reader = SmartDICOMImageReader::New(); reader->SetDataByteOrderToLittleEndian();

reader->SetDirectoryName(imgDir.toStdString().c_str());

reader->SetDataSpacing (3.2, 3.2, 1.5);

typedef vtkSmartPointer SmartContourFilter; SmartContourFilter skinExtractor = SmartContourFilter::New(); skinExtractor->SetInputConnection(reader->GetOutputPort());

skinExtractor->SetValue(0, 500);

typedef vtkSmartPointer SmartPolyDataNormals; SmartPolyDataNormals skinNormals = SmartPolyDataNormals::New(); skinNormals->SetInputConnection(skinExtractor->GetOutputPort()); skinNormals->SetFeatureAngle(60.0);

typedef vtkSmartPointer SmartPolyDataMapper; SmartPolyDataMapper skinMapper = SmartPolyDataMapper::New(); skinMapper->SetInputConnection(skinNormals->GetOutputPort());

skinMapper->ScalarVisibilityOff();

typedef vtkSmartPointer SmartActor; SmartActor skin = SmartActor::New();

skin->SetMapper(skinMapper);

typedef vtkSmartPointer SmartCamera; SmartCamera aCamera = SmartCamera::New(); aCamera->SetViewUp (0, 0, -1); aCamera->SetPosition (0, 1, 0); aCamera->SetFocalPoint (0, 0, 0);

aCamera->ComputeViewPlaneNormal(); aCamera->Azimuth(30.0); aCamera->Elevation(30.0); aRenderer->AddActor(skin);

aRenderer->SetActiveCamera(aCamera); aRenderer->ResetCamera (); aCamera->Dolly(1.5);

aRenderer->SetBackground(.2, .3, .4); renWin->SetSize(640, 480);

aRenderer->ResetCameraClippingRange (); iren->Initialize();

iren->Start(); }

test.cpp------------------------------------------end

本文来源:https://www.bwwdw.com/article/zfzr.html

Top