VTK数据的读写

 本文介绍VTK中数据模型的读写。

模型数据获取

  VTK应用程序所需的数据可以通过两种途径获取:第一种是生成模型,然后处理这些模型数据(如由类vtkCylinderSource生成的多边形数据);第二种是读取相关的数据文件,然后处理这些读入的数据(如vtkBMPReader读取的BMP图像)。

Reader与Writer类

  VTK针对不同的数据类型,提供了不同的读写类。

1、数据读写

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

使用Writer类的主要步骤如下。
1. 实例化Writer对象。
2. 输入要写盘的数据以及指定待写盘的文件名。
3. 用Writer()方法促使Writer类开始写盘操作。

2、场景的导入导出

场景的导入与导出是指将渲染场景中的对象,包括光照、相机、Actor属性、变换矩阵等信息写入文件中,或者从外部文件中将这些对象导入渲染场景中,一般所导入的文件含有多个数据集。

图像读写示例

示例读取一幅BMP图像并显示,然后保存。
CMakeLists.txt文件代码如下:

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
PROJECT(ReadWriterSingleImage)
FIND_PACKAGE(VTK REQUIRED)
INCLUDE(${VTK_USE_FILE})
ADD_EXECUTABLE(ReadWriteSingleImage ReadWriteSingleImage.cpp)
TARGET_LINK_LIBRARIES(ReadWriteSingleImage ${VTK_LIBRARIES})

ReadWriteSingleImage.cpp文件代码如下:

#include <vtkSmartPointer.h>
#include <vtkPNGReader.h>
#include <vtkJPEGWriter.h>
#include <vtkImageViewer2.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkInteractorStyleImage.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>

int main(int argc, char* argv[])
{

    //读取PNG图像
    vtkSmartPointer<vtkPNGReader> reader = vtkSmartPointer<vtkPNGReader>::New();
    reader->SetFileName("E:/TestData/VTK-logo.png");

    vtkSmartPointer<vtkInteractorStyleImage> style = vtkSmartPointer<vtkInteractorStyleImage>::New();

    //显示读取的单幅PNG图像
    vtkSmartPointer<vtkImageViewer2> imageViewer = vtkSmartPointer<vtkImageViewer2>::New();
    imageViewer->SetInputConnection(reader->GetOutputPort());

    vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =
        vtkSmartPointer<vtkRenderWindowInteractor>::New();
    renderWindowInteractor->SetInteractorStyle(style);

    imageViewer->SetupInteractor(renderWindowInteractor);
    imageViewer->Render();
    imageViewer->GetRenderer()->ResetCamera();
    imageViewer->Render();

    imageViewer->SetSize(640, 480);
    imageViewer->GetRenderWindow()->SetWindowName("ReadWriteSingleImage");

    //保存成JPG图像
    vtkSmartPointer<vtkJPEGWriter> writer = vtkSmartPointer<vtkJPEGWriter>::New();
    writer->SetFileName("E:/TestData/VTK-logo.jpg");
    writer->SetInputConnection(reader->GetOutputPort());
    writer->Write();

    renderWindowInteractor->Start();

    return EXIT_SUCCESS;
}

运行结果如下:

这里写图片描述

文件夹下多了VTK-logo.jpg文件:

代码解释:

示例中在显示图像时,并没有用到vtkRenderWindow、vtkRenderer、vtkActor等类,而只是使用了vtkImageViewer以及设置了交互样式。这是因为类vtkImageViewer已经封装了vtkRenderWindow,vtkRenderer,vtkActor2D和vtkImageMapper。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
vtk(Visualization Toolkit)是一个用于可视化和图形处理的开源软件库。它提供了许多用于创建、操作和可视化三维数据的功能,包括数据传输和处理。 在vtk中,数据传输(Data transfer)是指将数据从一个vtk数据对象(vtkDataObject)传输到另一个vtk数据对象的过程。数据传输可以用于在不同的vtk数据对象之间传递数据,并进行不同类型的数据处理和可视化。 vtk提供了许多方法来实现数据传输。其中最常用的是通过vtk数据管道(vtkDataPipeline)来传输数据数据管道是一种将一个或多个vtk数据对象链接在一起的机制,通过将数据从一个对象传输到另一个对象来达到数据可视化或处理的目的。 使用vtk进行数据传输的基本步骤如下: 1. 创建vtk数据对象:首先,需要创建vtk数据对象来存储数据vtk提供了许多不同类型的数据对象,包括点云、网格、图像等。 2. 将数据添加到数据对象中:可以使用vtk数据源(vtkSource)将数据添加到数据对象中。数据源是一种生成数据vtk对象,可以使用各种算法来生成不同类型的数据。 3. 连接数据对象:使用vtk数据管道将数据对象连接在一起。数据管道定义了数据传输的流程,包括输入和输出数据对象之间的关系。 4. 进行数据传输:通过调用vtk数据管道的Update方法,可以开始进行数据传输。在传输过程中,可以进行一些数据处理和转换操作,例如剪切、滤波、变换等。 5. 可视化或处理数据:传输完成后,可以使用vtk提供的各种方法对传输后的数据进行可视化或处理。可以使用vtk的可视化类和算法来创建图形并展示数据。 总而言之,vtk提供了丰富的功能来实现数据传输和处理。通过vtk数据管道和各种数据对象,可以轻松地进行数据传输,并利用vtk的可视化和处理功能来分析和展示数据

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值