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

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

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

猜你喜欢

转载自blog.csdn.net/juluwangriyue/article/details/121004349