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

news2025/1/11 12:51:58

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 类型

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

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

相关文章

javaWeb之过滤器(Filter)

目录 前言 过滤器概述 什么是过滤器 过滤器详细 过滤器的生命周期 过滤器的应用 创建一个简单的Filter类步骤 注意&#xff1a;指定拦截路径&#xff0c;我们有两种方式 实例 前言 本篇博客的核心 知道过滤器的整个拦截过程知道如何指定拦截路径知道过滤器的生命周期…

如何增强通信监控系统

随着员工工作方式的改变&#xff0c;创建安全的远程通信通道至关重要。这对于数据安全也很重要。通信监控系统是确保数据和网络安全的当务之急。 如今&#xff0c;员工越来越多地使用电子通信。在理想世界中&#xff0c;这些渠道的范围是明确界定的。在现实世界中&#xff0c;…

「Mac玩转仓颉内测版47」小学奥数篇10 - 数列求和

本篇将通过 Python 和 Cangjie 双语实现数列求和的计算。通过这个题目&#xff0c;学生将学会如何通过公式法和循环法求解等差数列与等比数列的和。 关键词 小学奥数Python Cangjie数列求和 一、题目描述 编写一个程序&#xff0c;计算等差数列和等比数列的和。用户输入首项…

Robot Framework的 跳出 for循环

一. 简介 前面简单学习了一下&#xff0c;robotframework中的 for循环语句&#xff0c;文章如下&#xff1a; Robot Framework的 for循环语句-CSDN博客 本文继续学习 有关 for循环的其他操作&#xff0c;例如跳出 for循环&#xff0c;或者退出某一次循环等操作。 二. Robo…

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

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

️ 在 Windows WSL 上部署 Ollama 和大语言模型的完整指南20241206

&#x1f6e0;️ 在 Windows WSL 上部署 Ollama 和大语言模型的完整指南 &#x1f4dd; 引言 随着大语言模型&#xff08;LLM&#xff09;和人工智能的飞速发展&#xff0c;越来越多的开发者尝试在本地环境中部署大模型进行实验。然而&#xff0c;由于资源需求高、网络限制多…

js:事件监听

事件监听 事件监听&#xff1a;让程序检测是否有事件产生&#xff0c;一旦有事件触发&#xff0c;就调用一个函数做出响应&#xff0c;也称为绑定事件或注册事件 事件&#xff1a;编程系统内发生的动作或发生的事情 比如用户单击一个按钮下拉菜单 添加事件监听 事件监听三要…

C# (WinForms) 使用 iTextSharp 库将图片转换为 PDF

iTextSharp简介 iTextSharp 是一个开源的 .NET 库&#xff0c;主要用于创建和操作 PDF 文档。它是 iText 的 .NET 版本&#xff0c;iText 是一个广泛使用的 Java 库。iTextSharp 继承了 iText 的核心功能并进行了适应 .NET 平台的调整。 iTextSharp 的主要功能包括&#xff1a…

使用 WebRtcStreamer 实现实时视频流播放

WebRtcStreamer 是一个基于 WebRTC 协议的轻量级开源工具&#xff0c;可以在浏览器中直接播放 RTSP 视频流。它利用 WebRTC 的强大功能&#xff0c;提供低延迟的视频流播放体验&#xff0c;非常适合实时监控和其他视频流应用场景。 本文将介绍如何在Vue.js项目中使用 WebRtcSt…

mysql5.7和mysql8.0安装教程(超详细)

目录 一、简介 1.1 什么是数据库 1.2 什么是数据库管理系统&#xff08;DBMS&#xff09; 1.3 数据库的作用 二、安装MySQL 1.1 国内yum源安装MySQL5.7&#xff08;centos7&#xff09; &#xff08;1&#xff09;安装4个软件包 &#xff08;2&#xff09;找到4个软件包…

ALSA笔记

alsa笔记 ALSA(Advanced Linux Sound Architecture)简介 以上是android和linux系统的音频整体架构图,他们不同的区别主要是在用户空间,Linux通过ALSA-Lib来和ALSA交互,而android则是tingyAlsa,其位于aosp源码根目录的/external/tinyalsa下; 在Kernel层,Alsa向上封装的D…

哈希表实现

哈希概念 哈希&#xff08;hash&#xff09;又称散列&#xff0c;是一种组织数据的方式。从译名来看&#xff0c;有散乱排列的意思。本质就是通过哈希函数把关键字 Key 跟存储位置建立一个映射关系&#xff0c;查找时通过这个哈希函数计算出 Key 存储的位置&#xff0c;进行快…

web复习(四)

JavaScript编程 1.计算圆的面积。 &#xff08;1&#xff09;表单中设置2个文本框、1个按钮、1个重置按钮&#xff0c;其中圆的面积文本框设置为只读&#xff1b; &#xff08;2&#xff09;编写两个自定义函数&#xff0c;分别是计算圆的面积函数area&#xff08;radius&…

第六届地博会世界酒中国菜助力广州龙美地标美食公司推动地标发展

第六届知交会暨地博会&#xff1a;世界酒中国菜助力广州龙美地标美食公司推动地标产品创新发展 2024年12月9日至11日&#xff0c;第六届粤港澳大湾区知识产权交易博览会暨国际地理标志产品交易博览会在中新广州知识城盛大启幕。本届盛会吸引了全球众多知识产权领域的专业人士和…

【期末复习】编译原理

1. 语法描述 1.1. 上下文无关文法 1.2. 句子 & 句型 & 语言 推导出来的都是句型但是如果句型中只含有终结符&#xff0c;那就是句子所有的句子合起来&#xff0c;才是语言 1.3. 文法 文法就是推导的式子。 1.4. 文法二义性 1.5. 文法二义性证明——根据最左 \ 最右推…

AI绘画设计实战-Day2

Stable Diffusion 提示词前缀 FF,(masterpiece:1.2),best quality,highres,extremely detailed CG,perfect lighting,8k wallpaper,anime,comic,game CG, FF&#xff0c;&#xff08;杰作&#xff1a;1.2&#xff09;&#xff0c;最高质量&#xff0c;高分辨率&#xff0c;极其…

python数据分析之爬虫基础:requests详解

1、requests基本使用 1.1、requests介绍 requests是python中一个常用于发送HTTP请求的第三方库&#xff0c;它极大地简化了web服务交互的过程。它是唯一的一个非转基因的python HTTP库&#xff0c;人类可以安全享用。 1.2、requests库的安装 pip install -i https://pypi.tu…

鸿雁电器发力,能否抢占康养卫浴新蓝海?

经济下行&#xff0c;叠加房地产行业的调整以及数智化浪潮的强劲推动&#xff0c;建材行业正面临着前所未有的变革与机遇。为了更好地把握行业趋势&#xff0c;求新求变&#xff0c;12月9日&#xff0c;鸿雁电器在青山湖园区鸿雁物联网大厦17楼鸿鹄厅成功举办了第四届“智创变革…

Scratch教学作品 | 3D飞行模拟器——体验飞行的无限乐趣! ✈️

今天为大家推荐一款令人惊叹的Scratch作品——《3D飞行模拟器》&#xff01;由BamBozzle制作&#xff0c;这款游戏完全用Scratch构建&#xff0c;带你体验开放世界飞行的自由与乐趣。从起飞到降落&#xff0c;每一步都需要你的精准操作&#xff01;更棒的是&#xff0c;这款游戏…

Linux服务器运维管理面板之1panel

华子目录 安装1panel使用卸载浏览器登录 安装 网站&#xff1a;https://community.fit2cloud.com/#/products/1panel/downloads 解压 [rootdocker-node1 ~]# tar -zxf 1panel-v1.10.13-lts-linux-amd64.tar.gz[rootdocker-node1 ~]# cd 1panel-v1.10.13-lts-linux-amd64/ [ro…