本文由Markdown语法编辑器编辑完成。
ITK提供了图像文件读入和写出的接口,分别是
itk::ImageFileReader和itk::ImageFileWriter。但是,在实际应用写文件的接口时,却发生了异常。例如当想将itkImage写出一幅png格式的图像时,系统报异常了。
经过查阅,最终得出的结论是,在写出文件时,需要为writer指出写出文件的类型名。用SetImageIO()的接口指定类型即可解决该问题。
itk::PNGImageIO::Pointer imageIO = itk::PNGImageIO::New();
writer->SetImageIO( imageIO );
//Test Code Begin:
ImageType::Pointer& image2D
//指出输出文件的输出路径和文件名称.
char *output_name = "D:\\image.png";
const unsigned int Dimension = 3;
typedef int InputPixelType;
typedef unsigned char OutputPixelType;
typedef itk::Image< InputPixelType, Dimension > InputImageType;
typedef itk::Image< OutputPixelType, Dimension > OutputImageType;
typedef itk::RescaleIntensityImageFilter<
ImageType, OutputImageType > RescaleFilterType;
RescaleFilterType::Pointer rescaler = RescaleFilterType::New();
rescaler->SetOutputMinimum( 0 );
rescaler->SetOutputMaximum( 255 );
rescaler->SetInput( image2D );
typedef itk::ImageFileWriter< OutputImageType > WriterType;
WriterType::Pointer writer = WriterType::New();
itk::PNGImageIO::Pointer imageIO = itk::PNGImageIO::New();
writer->SetImageIO( imageIO );
writer->SetFileName( output_name );
writer->SetInput( rescaler->GetOutput() );
try
{
std::cout << "Writing image: " << output_name << std::endl;
writer->Update();
}
catch( itk::ExceptionObject & err )
{
std::cerr << "ERROR: ExceptionObject caught !" << std::endl;
std::cerr << err << std::endl;
}
//Test Code End.