VTK知识学习(21)- 数据的读写

1、前言

对于应用程序而言,都需要处理特定的数据,VTK应用程序也不例外。

VTK应用程序所需的数据可以通过两种途径获取:

第一种是生成模型,然后处理这些模型数据(如由类 vtkCylinderSource 生成的多边形数据);

第二种是从外部存储介质里导入相关的数据文件,然后在应用程序中处理这些读入的数据(如vtkBMPReader 读取 BMP图像)。

另一方面,VTK也可以将程序中处理完成的数据写入单个文件中,或者将所渲染的场景导出,以备后续操作的使用。

从可视化管线的角度来看,一般以数据的读取(或由模型创建数据)开始,而以数据的写盘操作(或Mapper)结束,重点学习可视化管线两端相关的类,包括数据读写以及场景的导入导出。

2、Reader 类与Writer类

1)、常规步骤

要将外部数据读入可视化管线,主要的步骤如下。
1)实例化 Reader 对象。
2)指定所要读取的文件名。
3)调用 Update()方法促使管线执行。当管线后续的Fiter有Update()请求时,如调用Render()方法管线就会读取相应的图像文件,所以这一步有时也可省略。

 Writer 类的主要步骤如下:
1)实例化 Writer 对象。
2)输入要写盘的数据以及指定待写盘的文件名。
3)调用 Write0方法促使 Writer 类开始写盘操作。
VTK 提供了不同的 Reader/riter 类读写各种文件,对于类的使用者而言,最重要的是根据不同的文件类型选择合适的 Reader/Writer 类进行读写操作,不同的 Reader 类所输出的数据类型不相同,不同的 Writer 类所要求输入的数据类型也不同。

2)、读写类型对象

根据不同的数据集类型有不同 Reader/Writer 类:

3)、Png图像读取
private void RenderPNGImage()
{
    vtkPNGReader pngReader = vtkPNGReader.New();
    pngReader.SetFileName("D:\\图像\\boxes\\cardboard_boxes_01.png");
    pngReader.Update();
   

    vtkImageActor imageActor = vtkImageActor.New();
    imageActor.SetInputData(pngReader.GetOutput());
    imageActor.Update();

    vtkRenderer render = vtkRenderer.New();
    render.AddActor(imageActor);

    vtkRenderWindow renWin = renderWindowControl.RenderWindow;
    renWin.AddRenderer(render);
    renWin.Render();
}

4)、使用Factory读取图像

该类会试着寻找一种最适合的类对图像做读取操作,可以读取大部分标准格式的图像文件

 private void RenderImageUn()
 {
     string fileName = "D:\\图像\\boxes\\cardboard_boxes_01.png";
     vtkImageReader2 reader = vtkImageReader2Factory.CreateImageReader2(fileName);

     reader.SetFileName(fileName);
     reader.Update();

     vtkImageActor imageActor = vtkImageActor.New();
     imageActor.SetInputData(reader.GetOutput());

     vtkRenderer render = vtkRenderer.New();
     render.AddActor(imageActor);

     vtkRenderWindow renWin = renderWindowControl.RenderWindow;
     renWin.AddRenderer(render);
     renWin.Render();
 }
5)、读取序列图像

医学图像应用程序中常常会处理序列的图像文件,比如计算机断层成像或者磁共振成像所成的图像一般都是由多个有顺序的二维图像组成,应用程序需要一次性导入一个序列的二维图像。VTK没有提供专门的类读取序列图像文件,但VTK的图像 Reader 类都有提供方法 SetFileNames()来设置多个图像文件名,利用该方法可以实现序列图像的读取。示例 首先读取-个JPG 的序列图像 Head,该序列图像包含 100 张大小为 256x256 像素的二维图像,由这 100张二维图像组成一个三维数据体。

private void RenderSeries()
{
    vtkStringArray fileArray = vtkStringArray.New();
    for (int i = 1; i < 100; i++)
    {
        string ss = $"F:\\code\\VTK\\TestActiViz\\bin\\Debug\\data\\Head\\head{string.Format("{0:000}", i)}.jpg";
        fileArray.InsertNextValue(ss);
    }

    //读取JPG序列图像
    vtkJPEGReader reader = vtkJPEGReader.New(); 
    reader.SetFileNames(fileArray);

    vtkImageViewer2 viewer = vtkImageViewer2.New();
    viewer.SetInputConnection(reader.GetOutputPort());

    // vtkRenderWindowInteractor windowInteractor = vtkRenderWindowInteractor.New();
    vtkRenderWindow renWin = renderWindowControl.RenderWindow;
    viewer.SetSlice(50);
    viewer.SetSliceOrientationToXY();
    viewer.SetRenderWindow(renWin);
  //  viewer.Render();
    renWin.Render();

}

3、其他类型的读写

1)、vtkPolyData类型

2)、vtkRectilinearGrid 类型

3)、vtkUnstructuredGrid 类型

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Nignx部署Java服务测试使用的Spring Boot项目Demo

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

虚幻引擎生存建造系统

先做一个建造预览模式&#xff0c;按下按键B后进入建造预览模式 首先创建自定义事件Preview Loop 用射线追踪摆放物体预览位置&#xff0c;并做一个预览材质 增强输入设置按键 每帧判断是否进入建造模式 预览模式制作成功&#xff01; 接着做点击左键放置物品&#xff0…

Blender中使用BlenderGIS插件快速生成城市建筑模型

导入下载 BlenderGIS 插件 去github上下载其压缩包&#xff0c;地址如下&#xff1a; https://github.com/domlysz/BlenderGIS 在BlenderGIS中导入这个插件压缩包&#xff1a; 点击上方菜单栏的编辑&#xff0c;点击偏好设置 在插件>从磁盘安装中导入刚刚下载的压缩包 可…

C语言期末复习

1、任意输入一个半径给r&#xff0c;求圆的面积。 #include <stdio.h> #include <windows.h> void main() { double r,s; printf("输入一个半径给r"); scanf("%lf",&r); sr*r*3.1415926; printf("%lf",s); system(&qu…

深圳大学《2024年904自动控制原理真题》 (完整版)

本文内容&#xff0c;全部选自自动化考研联盟的&#xff1a;《深圳大学904自控考研资料》的真题篇。后续会持续更新更多学校&#xff0c;更多年份的真题&#xff0c;记得关注哦~ 目录 2024年真题 Part1&#xff1a;2024年完整版真题 2024年真题

transformers生成式对话机器人

简介 生成式对话机器人是一种先进的人工智能系统&#xff0c;它能够通过学习大量的自然语言数据来模拟人类进行开放、连贯且创造性的对话。与基于规则或检索式的聊天机器人不同&#xff0c;生成式对话机器人并不局限于预定义的回答集&#xff0c;而是可以根据对话上下文动态地…

NanoLog起步笔记-4-Server端的两个线程

nonolog起步笔记-4-Server端的两个线程 Server端的两个线程两个线程的角色与各自的职责RuntimeLogger::compressionThreadMain线程 详细学习一下相关的代码第三个线程第一次出现原位置swip buffer Server端的两个线程 如前所述&#xff0c;nanolog的server端&#xff0c;相对而…

Freertos任务切换

一、操作系统进行任务切换的时机&#xff1a; 采用信号量实现任务的互斥&#xff1a; 二、FreeRTOS 任务切换场合 PendSV 中断的时候提到了上下文(任务)切换被触发的场合&#xff1a; ● 可以执行一个系统调用 ● 系统滴答定时器(SysTick)中断。 1、执行系统调用 执行系统…

【硬件测试】基于FPGA的4FSK调制解调通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR

目录 1.算法仿真效果 2.算法涉及理论知识概要 3.Verilog核心程序 4.开发板使用说明和如何移植不同的开发板 5.完整算法代码文件获得 1.算法仿真效果 本文是之前写的文章: 《基于FPGA的4FSK调制解调系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR》 的…

【Vue2+Element-ui】el-dialog宽度适配

1、不适配问题 分辨率100%-页面 分辨率150%-页面 在项目中&#xff0c;我开发分辨率一直是100%&#xff0c;但是客户使用的分辨率不相同&#xff0c;所以宽度要适配 2、解决-封装mixins.js 1)、封装的mixins 我将宽度设置成动态的&#xff0c;因为我的项目中需求不同。 expor…

Tr0ll: 1 Vulnhub靶机渗透笔记

Tr0ll: 1 本博客提供的所有信息仅供学习和研究目的&#xff0c;旨在提高读者的网络安全意识和技术能力。请在合法合规的前提下使用本文中提供的任何技术、方法或工具。如果您选择使用本博客中的任何信息进行非法活动&#xff0c;您将独自承担全部法律责任。本博客明确表示不支…

23. C++STL 9 (priority_queue的使用和适配实现详解)

⭐本篇重点&#xff1a; 1 priority_queue的使用与底层原理 2 使用容器来适配 priority_queue ⭐本篇代码&#xff1a;c学习 橘子真甜/c-learning-of-yzc - 码云 - 开源中国 (gitee.com) ⭐标⭐是比较重要的部分 目录 一. priority_queue&#xff08;优先级队列&#xff09;的…

十四、Pod的升级和回滚

当集群中的某个服务需要升级时,我们需要停止目前与该服务相关的所有Pod,然后下载新版本镜像并创建新的Pod。如果集群规模比较大,则这个工作变成了一个挑战,而且先全部停止然后逐步升级的方式会导致较长时间的服务不可用。Kubernetes提供了滚动升级功能来解决上述问题。 如…

中间件--MongoDB部署及初始化js脚本(docker部署,docker-entrypoint-initdb.d,数据迁移,自动化部署)

一、概述 MongoDB是一种常见的Nosql数据库&#xff08;非关系型数据库&#xff09;&#xff0c;以文档&#xff08;Document&#xff09;的形式存储数据。是非关系型数据库中最像关系型数据库的一种。本篇主要介绍下部署和数据迁移。 在 MongoDB 官方镜像部署介绍中&#xff…

MES系统通过eDrawings Pro API开发图纸批量转换工具,实现3D在线查看

声明&#xff1a;部分代码来源于网络&#xff0c;如有疑问&#xff0c;请联系本人删除。 通过C#结合eDrawings API提供接口&#xff0c;实现图纸转换为换.jpg、.tif、.bmp、.stl、.exe、.html、.zip、.edrw、.eprt 和 .eas格式工具&#xff0c;尤其是.html格式&#xff0c;可以…

Java阶段三06

第3章-第6节 一、知识点 理解MVC三层模型、理解什么是SpringMVC、理解SpringMVC的工作流程、了解springMVC和Struts2的区别、学会使用SpringMVC封装不同请求、接收参数 二、目标 理解MVC三层模型 理解什么是SpringMVC 理解SpringMVC的工作流程 学会使用SpringMVC封装请求…

【计算机网络】期末速成(2)

部分内容来源于网络&#xff0c;侵删~ 第五章 传输层 概述 传输层提供进程和进程之间的逻辑通信&#xff0c;靠**套接字Socket(主机IP地址&#xff0c;端口号)**找到应用进程。 传输层会对收到的报文进行差错检测。 比特流(物理层)-> 数据帧(数据链路层) -> 分组 / I…

word poi-tl 表格功能增强,实现表格功能垂直合并

目录 问题解决问题poi-tl介绍 功能实现引入依赖模版代码效果图 附加&#xff08;插件实现&#xff09;MergeColumnData 对象MergeGroupData 类ServerMergeTableData 数据信息ServerMergeTablePolicy 合并插件 问题 由于在开发功能需求中&#xff0c;word文档需要垂直合并表格&…

记一次:使用C#创建一个串口工具

前言&#xff1a;公司的上位机打不开串口&#xff0c;发送的时候设备总是关机&#xff0c;因为和这个同事关系比较好&#xff0c;编写这款软件是用C#编写的&#xff0c;于是乎帮着解决了一下&#xff08;是真解决了&#xff09;&#xff0c;然后整理了一下自己的笔记 一、开发…

LLama系列模型简要概述

LLama-1&#xff08;7B, 13B, 33B, 65B参数量&#xff1b;1.4T tokens训练数据量&#xff09; 要做真正Open的AI Efficient&#xff1a;同等预算下&#xff0c;增大训练数据&#xff0c;比增大模型参数量&#xff0c;效果要更好 训练数据&#xff1a; 书、Wiki这种量少、质量高…