VTK学习笔记(七)vtkImageData基本操作

本文详细介绍了VTK中vtkImageData类的基础操作,包括获取和修改图像信息,如维度、像素值,以及如何使用ImageIterator实现图像赋值。通过实例演示了如何访问和操作VTKImageData,是VTK图像处理入门必备技巧。
摘要由CSDN通过智能技术生成

1、vtkImageData基本操作

  • 图像数据在VTK 中是用vtkImageData 类表示的,对于不同的图像文件类型,VTK 提供相对应的类对图像文件进行读写操作。比如,前面章节中所提的vtkBMPReader 是用于读取BMP 图像,vtkJPEGReader 用于读取JPG 图像。VTK 除了支持BMP、JPG 图像格式之外,还支持其他多种图像格式的读写。
  • 图像处理离不开一些基本的图像数据操作,例如获取和修改图像的基本信息,访问和修改图像像素值,图像显示,图像类型转换等等。熟练掌握这些基本操作有助于使用VTK进行图像处理的快速开发。

1.1、图像信息访问和修改

vtkImageData中提供了多个函数用于访问或者获取图像的基本信息,这些函数通常使用Set或者Get加上相应的信息名的形式,例如获取图像维数的方法定义为GetDimensions()。当然这里主要从类的层次上进行VTK的学习,这里不再具体赘述每个函数的基本名称和使用,用户可以查阅相应的类文档。下面通过一个例子来说明怎样访问图像的基本信息。

vtkSmartPointerreader = vtkSmartPointer::New();
reader->SetFileName (..\lena.bmp”);
reader->Update();
int dims[3];
reader->GetOutput()->GetDimensions(dims);
std::cout<<”图像维数:<

参考:vtkImageData基本操作

1.2、图像赋值

#include <vtkImageData.h>
#include <vtkImageIterator.h>
#include <vtkNew.h>

int main(int, char*[])
{
  // Create an image data
  vtkNew<vtkImageData> imageData;

  // Specify the size of the image data
  imageData->SetDimensions(10, 20, 30);
  imageData->AllocateScalars(VTK_DOUBLE, 3);

  // Fill every entry of the image data with x,y,z
  int* dims = imageData->GetDimensions();
  double* ptr = static_cast<double*>(imageData->GetScalarPointer(0, 0, 0));
  for (int z = 0; z < dims[2]; z++)
  {
    for (int y = 0; y < dims[1]; y++)
    {
      for (int x = 0; x < dims[0]; x++)
      {
        *ptr++ = z;
        *ptr++ = y;
        *ptr++ = x;
      }
    }
  }

  // Define the extent to be extracted
  int extent[6];
  extent[0] = 2;
  extent[1] = 5;
  extent[2] = 2;
  extent[3] = 5;
  extent[4] = 15;
  extent[5] = 15;

  // Retrieve the entries from the image data and print them to the screen
  vtkImageIterator<double> it(imageData, extent);
  while (!it.IsAtEnd())
  {
    double* valIt = it.BeginSpan();
    double* valEnd = it.EndSpan();
    while (valIt != valEnd)
    {
      // Increment for each component
      double x = *valIt++;
      double y = *valIt++;
      double z = *valIt++;
      std::cout << "(" << x << "," << y << "," << z << ") ";
    }
    std::cout << std::endl;
    it.NextSpan();
  }

  return EXIT_SUCCESS;
}

参考:ImageIterator

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

落花逐流水

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值