实例6 RGB图像像素色彩成分的访问

#include "itkImage.h"
#include "itkImageFileReader.h"
//为了使用 itk::RGBPixel 类,包含头文件
#include "itkRGBPixel.h"
//在 ITK 中如何表示 RGB 图像。
int main( int , char * argv[] )
{
  //RGBPixeld 类的使用是基于用来代表红、绿和蓝的像素成分的类型之上的
  //定义RGBPixel类型的PixelType对象
  typedef itk::RGBPixel< unsigned char >    PixelType;
  //然后将这个类型PixelType对象作为图像中的像素模板参数,得到ImageType对象
  typedef itk::Image< PixelType, 3 >   ImageType;
  //使用itk::ImageFileReader 对象从文件中读取图像
  typedef itk::ImageFileReader< ImageType >  ReaderType;
  //实例化ReaderType的读取对象reader
  ReaderType::Pointer reader = ReaderType::New();
  //设置RGB图像索引
  const char * const filename = "789.jpg";
  //图像读取
  reader->SetFileName( filename );
  reader->Update();
  //reader读取到的图像数据输出到image
  ImageType::Pointer image = reader->GetOutput();
  const ImageType::IndexType pixelIndex = {{25,35,0}};

  //使用 RGBPixel 类提供的方法来执行对像素色彩成分的访问
  PixelType onePixel = image->GetPixel( pixelIndex );
  PixelType::ValueType red   = onePixel.GetRed();//提取红色部分
  PixelType::ValueType green = onePixel.GetGreen();//提取绿色部分
  PixelType::ValueType blue  = onePixel.GetBlue();//提取蓝色部分
  // Software Guide : EndCodeSnippet
  std::cout << "method1" << std::endl;
  std::cout << "Pixel values from GetRed,GetGreen,GetBlue:" << std::endl;
  std::cout << "Red = "
            << itk::NumericTraits<PixelType::ValueType>::PrintType(red)
            << std::endl;
  std::cout << "Green = "
            << itk::NumericTraits<PixelType::ValueType>::PrintType(green)
            << std::endl;
  std::cout << "Blue = "
      << itk::NumericTraits<PixelType::ValueType>::PrintType(blue)
      << std::endl << std::endl;


  //由于 itk::RGBPixel 从 itk::FixedArray 类继承了 [ ] 操作
  //以下方法也可执行对像素色彩成分的访问
  red   = onePixel[0];  // extract Red   component
  green = onePixel[1];  // extract Green component
  blue  = onePixel[2];  // extract Blue  component

  std::cout <<  "method2" << std::endl;
  std::cout << "Pixel values:" << std::endl;
  std::cout << "Red = "
            << itk::NumericTraits<PixelType::ValueType>::PrintType(red)
            << std::endl;
  std::cout << "Green = "
            << itk::NumericTraits<PixelType::ValueType>::PrintType(green)
            << std::endl;
  std::cout << "Blue = "
            << itk::NumericTraits<PixelType::ValueType>::PrintType(blue)
            << std::endl;
  return EXIT_SUCCESS;
}

ITK系列6_ RGB图像像素色彩成分的访问_#include

ITK系列目录:

1 ITK图像数据表达之图像

2 ITK图像处理之图像滤波

3 ITK图像处理之图像分割

注:例程配套素材见系列目录