000:VTK的安装(VTK 编译 + 运行第一个例子)

news2024/9/21 12:48:16

 VTK 医学图像处理---VTK安装

简介:

      主要包括四个部分:

  1. 安装前准备(需要下载和安装什么软件以及为什么);
  2. VTK编译与安装(编译过程中的一些选项到底是否勾选,已经为什么勾选);
  3. 在项目中配置/使用VTK (配置有多种方式,选择适合自己的方式);
  4. 运行VTK第一个例子(显示一张医学图像)。

1 安装前准备 

    在安装前的准备工作(以Windows系统为例)主要有以下三个部分:

第一部分:安装Visual Studio 2022/2019/2017/2015均可,其中2022等数字表示年份,特别注意,Visual Studio可以在微软的官网(链接:下载 Visual Studio Tools - 免费安装 Windows、Mac、Linux (microsoft.com))下载,不要去乱七八糟的网站下载,下载时选择社区版本(社区版免费)即可,网站上关于如何安装Visual Studio的资料比较多(在 Visual Studio 中安装 C 和 C++ 支持 | Microsoft Learn),这里就不详细介绍了,安装过程中一定要勾选 Desktop development with c++选项,如下图所示:

      安装完成后,可以新建立一个控制台程序测试下,过程如下:启动Visual Studio 2022  ->  创建新项目  ->选择C++ 控制台应用 ->点击 “下一步” 输入名称后,点击创建,创建完成,进行编译运行即可。

第二部分:下载Cmake,下载最新版本的Cmake,下载地址Download CMake,在DOWNLOAD页面Binary distributions:中选择适合的版本下载,这里可以选择非安装版本的CMake,解压就可以运行,如下图:

点击下载即可,下载后,可以根据自己需要,放置到文件夹中,解压后在bin文件夹内,可以看到cmake-gui.exe应用程序,后面我们将用到该应用程序。

第三部分:下载VTK源码, 在VTK官网(VTK - The Visualization Toolkit)下载页面(Download)下载合适的版本,目前最新版是9.3.1,我们下载8.2版本为例,如下图:

  下载完成后,放到自己想保持的文件夹内,解压,保持的路径尽量不要有中文、空格或数字

小结:安装Visual Studio 过程中,一定要选择Desktop development with c++选项,这样才会安装C++的编译环境;下载和解压Cmake和VTK时,保存和解压后的文件夹路径不要有中文、空格、数字或下划线等特殊字符,预防后面构建工程时报错;VTK解压后时源代码,我们想要使用Visual Studio 对源代码进行编译,就要构建适合Visual Studio的项目,这个构建的过程时有CMake软件来完成的,构建好VTK的Vsual Studio项目后,就可以使用Visual Studio的C++编译器进行编译了,这就时安装和编译VTK的过程。

2 VTK的编译与安装

目的:使用Cmake 将VTK源代码组织成Visual Studio项目(VTK支持多种平台,通过Cmake来组织不同平台下的项目管理),然后使用Visual Studio打开项目,将VTK的源代码编译为可调用的动态库(头文件、lib 和 dll 文件)。

网上关于使用CMake生成VTK项目的介绍有很多,比较详细的有详细图文讲解CMake编译VTK,包含详细的编译环境版本_vtk编译-CSDN博客,本不想再详细介绍的,但还是有些差异,如上面勾选了QT和VTK的例子,这里我们将使用最小的模块配置方式(不必要的都不勾选,加快编译过程),所以还是详细介绍下:

点击 Finish,然后CMake会输出项目进展,警告和错误会以红色字体输出,这个过程需要一定的时间。完成后入下图所示:

接下来,我们只修改一项,如下图所示,这里的路径可以根据自己的需要来修改,这个路径中,会保存编译好的VTK库,后面我们只需要这个文件夹内的内容。

然后点击   Configure, 内容框中无红色后,点击Generate

关闭CMake,打开 E:/VTKProject/vtkBin  文件夹

双击打开VTK.sln , 点击菜单中的< 生 成>   接着点击  生成解决方案,或直接按下快捷键F7

等待编译完成(此过程需要一定的时间),完成后,右键单击INSTALL,

完成后,在安装目录  E:\VTKProject\vtkInstall 中将会有生成好的头文件,lib文件和DLL文件,头文件在Include文件夹内,lib文件在lib文件夹内,DLL在 bin文件夹内

在此,编译完成,编译过程中,如果出现问题,通过查看输出的信息,就可以解决,也可以根据输出信息,通过网络检索来找解决方法。

3 在自己的项目中配置和使用VTK

目的:将生成的动态度(头文件、lib 和 dll 文件),添加到自己的项目中,然后调用VTK的类来实现自己想要的效果。

接下来在自己的项目中配置VTK环境,创建一个新的C++控制台程序,右键项目名称,在弹窗框中,选择最下面的 属性,打开属性对话框。

在属性对话框中,在配置选项中,选择所有配置,然后再配置属性中,选择C/C++,单击常规,在“附加包含目录中”,添加VTK头文件(刚才INSTALL生成文件所在路径,这里是E:\VTKProject\vtkInstall\include\vtk-8.2中,其中E:\VTKProject\vtkInstall 是在CMake 中设置的CMake_INSTALL_PREFIX 一直),include\vtk-8.2是INSTALL过程中自动创建的,添加后为

在 链接器,选项中添加lib文件的路径和lib文件,

在附加库目录中添加路径:E:\VTKProject\vtkInstall\lib\,注意根据自己的实际路径来设置,路径一定要到lib文件所在目录下,

示例:

由于lib文件比较多,全部手动录入很麻烦,可以自己vtk lib文件根目录下,创建一个文本文件,然后再文本文件中输入:

DIR *.lib /B >LIBLIST.TXT

保存后,关闭,然后将该文件的后缀txt,修改为bat,修改完成后双击运行,在文件夹内会多一个LIBLIST.TXT文件,打开里面就是全部的vtk lib文件名,直接拷贝到上面图中的设置里面即可。

4 第一个例子-显示DICOM图像

目的:显示一张DICOM图像,测试用的DICOM文件可在CSDN下载

创建一个新的C++控制台程序,安装第3部分的内容,在项目属性中配置好VTK的库,删除VS自动生成的代码,然后复制下面所有的代码到自己的项目中,保存。

#include <vtkNew.h>
#include <vtkDICOMImageReader.h>
#include <vtkImageViewer2.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkRenderer.h>

void main()
{
	// 读取指定文件夹"D:\\234"内的所有DICOM文件.
	vtkNew<vtkDICOMImageReader> reader;
	reader->SetDirectoryName("D:\\DicomFiles");
	reader->Update();

	// 创建一个交互对象,用了处理鼠标和键盘事件
	vtkNew<vtkRenderWindowInteractor> renderWindowInteractor;

	// 显示DICOM数据
	vtkNew<vtkImageViewer2> imageViewer;
	imageViewer->SetInputConnection(reader->GetOutputPort());
	imageViewer->SetupInteractor(renderWindowInteractor);

	// 初始化渲染和相机
	imageViewer->Render();
	imageViewer->GetRenderer()->ResetCamera();
	/* 指定窗口的比较颜色为灰色(.2,.2,.2)*/
	imageViewer->GetRenderer()->SetBackground(.2,.2,.2);  
	/* 设置窗体的大小为宽800,高800*/
	imageViewer->GetRenderWindow()->SetSize(800, 800);
	/* 设置窗口的标题*/
	imageViewer->GetRenderWindow()->SetWindowName("Read DICOM Series");
	imageViewer->Render();
	renderWindowInteractor->Start();
}

单击 本地Windows调试器,启动项目。

运行结果:

操作: 鼠标左键按下移动---调节窗宽窗位;

            鼠标中键按下移动---移动图像; 

            鼠标右键按下移动----缩放图像;

            中间滚轮上下滚动----缩放图像;

            按下CTRL键 + 鼠标左键按下移动----旋转图像

           按下SHIFT键+ 鼠标左键按下移动----移动图像; 

可以自己操作测试下。

总结

        目的是将VTK的源代码编译成动态度(不熟悉动态库的可以检索下),也就是把VTK的源代码编译成头文件、lib文件和dll文件,以后我们需要使用VTK的时候,直接使用编译好的头文件、lib文件和dll文件就可以了(当然,你也可以将VTK的源代码全部添加的自己的项目中来使用,按照自己的需要来修改源代码,但非必要不建议这样使用)。

       下节,我们将详细介绍

             1-配置VTK库的几种方式以及每种方式的优缺点;

             2-学习VTK的方法(资料 + 学习路线)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2101991.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

9.2-考试项目前端容器的高可用+java容器的高可用+使用docker-compose部署考试前端容器+使用docker-compose一次性创建多台容器

配置高可用的项目 基于部署考试系统的项目进行高可用 一、前端的高可用 1.先创建三个前端nginx容器&#xff0c;端口不能映射80 # 删除通用的前端容器 [roothaproxy ~]# docker ps --all CONTAINER ID IMAGE COMMAND CREATED STATUS…

数论——拓展欧几里德算法复习

最近也是在备战比赛&#xff0c;所以也是来小小的复习了一下以前学的东西 最重要的是第一道题&#xff01; 最重要的是第一道题&#xff01; 最重要的是第一道题&#xff01; 先放拓欧板子&#xff08;不懂怎么推出了就发在评论区或者私聊&#xff09; int exgcd(int a,i…

s3fs的使用

s3fs是一个将s3服务器上的桶映射为本地目录的程序。 项目源码位于&#xff1a; https://github.com/s3fs-fuse/s3fs-fuse 这是一个比较长期的项目了&#xff0c;现在在大数据领域S3协议基本上已经成为最通用的协议。 各大云平台&#xff0c;什么阿里云&#xff0c;某为云&am…

初识Linux · 有关makefile

目录 前言&#xff1a; 1 makefile的简单使用 2 makefile介绍 前言&#xff1a; 我们上文介绍了gcc和g的基本使用&#xff0c;带了许多的子指令&#xff0c;但是有的时候啊&#xff0c;一个一个敲指令确实有点麻烦了&#xff0c;此时&#xff0c;一个工具就能派上用场&…

DDD设计方法-3-仓储,封装持久化数据

前情提要&#xff1a;一共包含 如下六篇文章&#xff08;篇幅精简&#xff0c;快速入门&#xff09; 1、初识DDD 2、聚合、实体、值对象 3、仓储&#xff0c;封装持久化数据 4、端口和适配器 5、领域事件 6、领域服务&#xff0c;实现约定 DDD设计方法-3-仓储&#xff0c;封装…

计算机网络 第2章 物理层

文章目录 通信基础基本概念信道的极限容量编码与调制常用的编码方法常用的调制方法 传输介质双绞线同轴电缆光纤以太网对有限传输介质的命名规则无线传输介质物理层接口的特性 物理层设备中继器集线器一些特性 物理层任务&#xff1a;实现相邻节点之间比特&#xff08;0或1&…

后端MVC三层架构,Mybatis ,雪花算法生成唯一id

一.MVC MVC(Model View Controller)&#xff0c;它是一种思想&#xff0c;他把软件系统分为 以下三部分&#xff1a; Model(模型)&#xff1a;用来处理程序中数据逻辑的部分&#xff08;service&#xff0c;dao层&#xff09; View(视图)&#xff1a;在应用程序中&#xff0…

如何把逆地理编码结果表格的不同字段都作为点标注的属性

0.序 很多行业都需要获取一些地点的信息作为gis基础数据。 如消防行业的重点建筑 交通行业的道路 智慧城市的商业楼栋等等。 这些表格信息如何叠加到地图之上&#xff0c;并能够很好的查看各个字段的信息&#xff1f; 本文的重点是把经纬度坐标的Excel表格内容转成kml&…

【Python】数据分析分类图可视化

目录 条形图 箱形图 散点图 分簇散点图 小提琴 分簇小提琴 条形图 条形图是一种直观的图表形式&#xff0c;它通过不同长度的矩形条&#xff08;即“条形”&#xff09;来展示数值变量的中心趋势估计值&#xff0c;其中每个矩形的高度直接对应于该组数据的某个中心量度&…

保存json时,保存成自己喜欢的格式的方法(而不是直接保存成格式化的json文档)

保存json时&#xff0c;不是直接保存成格式化的json文档的格式的方法 前言&#xff0c;博主是如何把格式话的json格式保存成自己喜欢的json格式的保存成格式化的json文档的格式&#xff1a;带缩进格式全部保存成一行每条数据保存成一行&#xff1a; 保存成自己喜欢的格式碎碎念…

《Rust避坑入门记》第1章:挖数据竞争大坑的滥用可变性

赵可菲是一名Java程序员&#xff0c;一直在维护一个有十多年历史的老旧系统。这个系统即将被淘汰&#xff0c;代码质量也很差&#xff0c;每次上线都会出现很多bug&#xff0c;她不得不加班修复。公司给了她3个月的内部转岗期&#xff0c;如果转不出去就会被裁员。她得知公司可…

奇安信天眼--探针/分析平台部署及联动

奇安信天眼–探针/分析平台部署及联动 一 概述二 探针/分析平台部署及联动 1.网络拓扑2.配置流量传感器&#xff08;探针&#xff09; (1)登录控制台(2)配置接口(3)配置默认路由及DNS(4)配置SNMP(5)在探针联动分析平台 3.配置分析平台 (1)登录控制台(2)配置接口(3)配置默认路由…

2024年全国各省路网矢量数据介绍

一、2024年全国路网矢量数据介绍 数据更新时间&#xff1a;2024年5月 数据范围&#xff1a;全国&#xff08;不包含台湾省&#xff09; 数据格式&#xff1a;shp&#xff08;线&#xff09; 数据包含类型&#xff1a;城市主干道、城市次干道、城市快速路、城市支路、高速公…

Python编码系列—Python代码审查的艺术:提升代码质量的黄金法则

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

苹果录屏功能究竟何在?深入探寻苹果设备上的录屏功能:简便、高效、一键达成

在当下这一数字化的时代&#xff0c;不论是教学演示&#xff0c;还是游戏分享&#xff0c;抑或是工作汇报&#xff0c;录屏软件皆已成为我们日常生活中不可或缺之工具。苹果设备以其出类拔萃的用户体验而声名远播&#xff0c;而其内置的录屏功能更是将便捷性与功能性精妙融合。…

TensorFlow介绍二-线性回归案例

一.案例步骤 1.准备数据集&#xff1a;y0.8x0.7 100个样本 2.建立线性模型&#xff0c;初始化w和b变量 3.确定损失函数&#xff08;预测值与真实值之间的误差&#xff09;&#xff0c;均方误差 4.梯度下降优化损失 二.完整功能代码&#xff1a; import os os.environ[TF…

前端脚手架,自动创建远程仓库并推送

包含命令行选择和输入配置&#xff0c;远程仓库拉取模板&#xff0c;根据配置将代码注入模板框架的代码中&#xff0c;自动创建远程仓库&#xff0c;初始化git并提交至远程仓库&#xff0c;方便项目开发&#xff0c;简化流程。 目录结构 创建一个bin文件夹&#xff0c;添加ind…

KAN 学习 Day2 —— utils.py及spline.py 代码解读及测试

在KAN学习Day1——模型框架解析及HelloKAN中&#xff0c;我对KAN模型的基本原理进行了简单说明&#xff0c;并将作者团队给出的入门教程hellokan跑了一遍&#xff0c;今天我们直接开始进行源码解读。 目录 一、kan目录 二、utils.py 2.1 导入库和模块 2.2 逆函数定义 2.3 …

CentOS 7安装Docker详细步骤-无坑-丝滑-顺畅

一&#xff0c;安装软件包 yum install -y yum-utils device-mapper-persistent-data lvm2二&#xff0c;更换yum源为阿里源&#xff1a; yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 三&#xff0c;查看docker版本&…

标准库标头 <optional> (C++17)学习之optional

类模板 std::optional 管理一个可选 &#xfeff;的所含值&#xff0c;即既可以存在也可以不存在的值。 一种常见的 optional 使用情况是作为可能失败的函数的返回值。与如 std::pair<T, bool> 等其他手段相比&#xff0c;optional 可以很好地处理构造开销高昂的对象&a…