ITK读取RGB图像像素值

/*这个程序接收输入参数作为文件路径, 读取指定的图片数据(RGB), 并显示指定位置的像素值。(这里是[0,0]位置) */
#include "itkImage.h" 
#include "itkRGBPixel.h" 
#include "itkJPEGImageIOFactory.h"
#include "itkImageFileReader.h" 
#include <iostream> 
using namespace std;
int main(int, char * argv[])
{ //声明一些参量类型 
  //指定图片像素类型为RGB,unsigned char,2维平面图 
  //通过指定的图像类型声明图像读取器 
    typedef itk::RGBPixel<unsigned char>PixelType;
    typedef itk::Image<PixelType, 2>ImageType;
    typedef itk::ImageFileReader<ImageType> ReaderType;

    //创建图像读取器 
    ReaderType::Pointer reader = ReaderType::New();
    itk::JPEGImageIOFactory::RegisterOneFactory();

    //从命令行参数获取文件路径,并设置给reader 
    const char* filename = "test1.jpg";
    reader->SetFileName(filename);
    reader->Update();

    //声明图像object,并与读取器输出绑定 
    ImageType::Pointer image = ImageType::New();
    image = reader->GetOutput();

    //itk中访问图像数据需要通过Index,Index在这里理解成一个数组 
    //维数与图像维数对应 
    //并设置要访问的位置[0,0] 
    ImageType::IndexType pixcelIndex;
    pixcelIndex[0] = 0;//列数 
    pixcelIndex[1] = 0;//行数 

    //获取图像的像素数据 
    PixelType pixel1 = image->GetPixel(pixcelIndex);
    PixelType::ValueType red = pixel1.GetRed();
    PixelType::ValueType green = pixel1.GetGreen();
    PixelType::ValueType blue = pixel1.GetBlue(); 
    
    //输出数据,注意,itk中的像素数据需要由专门的模块来处理 
    cout << "get pixel at [0,0]:" << endl;
    cout << "R:" << itk::NumericTraits<PixelType::ValueType>::PrintType(red) << endl;
    cout << "G:" << itk::NumericTraits<PixelType::ValueType>::PrintType(green) << endl;
    cout << "B:" << itk::NumericTraits<PixelType::ValueType>::PrintType(blue) << endl;
    
    system("pause");
    return 0;
}


 

猜你喜欢

转载自blog.csdn.net/caomin1hao/article/details/81131063