实例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系列目录:
注:例程配套素材见系列目录