itk 读取图片和写图片

itk读取图片

typedef itk::Image<UCHAR, Dimension> ImageType_8bits;
typedef itk::Image<USHORT, Dimension> ImageType_16bits;//第一个图图片类型16位,第二个是位数3维图片或者二维图片
typedef itk::ImageFileReader<ImageReader::ImageType_8bits> ReaderType_8bits;
typedef itk::ImageFileReader<ImageReader::ImageType_16bits> ReaderType_16bits;
typedef itk::TIFFImageIO TIFFIOType;
//获取图片信息

bool ImageReader::GetImageInfo(const std::string& path)
{
	if (!paramPack) return false;
	TIFFIOType::Pointer tiffIO = TIFFIOType::New();
	if (!tiffIO->CanReadFile(path.c_str())){
		return false;
	}
	tiffIO->SetFileName(path.c_str());
	tiffIO->ReadImageInformation();
	int x, y, z;
	itk::ImageIOBase::IOComponentType bitspersample = tiffIO->GetComponentType();
	if (Dimension!=tiffIO->GetNumberOfDimensions()){
		return false;
	}
	x = tiffIO->GetDimensions(0);
	y = tiffIO->GetDimensions(1);
	z = tiffIO->GetDimensions(2);
	paramPack->xRangeMax_ = x;
	paramPack->yRangeMax_ = y;
	paramPack->zRangeMax_ = z;
	dataType = bitspersample == itk::ImageIOBase::IOComponentType::UCHAR ? DATATYPE::IMAGE8 : DATATYPE::IMAGE16;
	return true;
}
//读取图片
bool ImageReader::ReadImage_8bits(ImageType_8bits::Pointer &Image, const char *path){
	ReaderType_8bits::Pointer Reader = ReaderType_8bits::New();
	Reader->SetFileName(path);
	try
	{
		Reader->Update();
	}
	catch (itk::ExceptionObject&)
	{
		MITK_ERROR << "Read " << path << "error!";
		return 1;
	}

	Image->Initialize();
	Image = Reader->GetOutput();
	Image->Update();

	return true;
}
//写图片
bool ImageWriter::WriterImage_8bits(ImageType_8bits::Pointer &Image, const char *path){
	TIFFIOType::Pointer tiffIO = TIFFIOType::New();
	/*tiffIO->SetCompressionToLZW();*/
	WriterType_8bits::Pointer Writer = WriterType_8bits::New();
	Writer->SetFileName(path);
	Writer->SetInput(Image);
	Writer->SetImageIO(tiffIO);
	Writer->UseCompressionOn();
	try
	{
		Writer->Update();
	}
	catch (itk::ExceptionObject &)
	{
		MITK_INFO << path << "\t write error!";
		return false;
	}
	return true;
}

除了TIF格式的,还支持其他格式的

typedef itk::ImageFileWriter<ImageType_16bits> WriterType_16bits;
typedef itk::PNGImageIO PNGIOType;
bool Crowdsourcing::WriteImage16Bit(uint16 *Image, const char* path, int width, int height)
{
	itk::PNGImageIO::Pointer PNGIO = itk::PNGImageIO::New();
	bool isFileValid = PNGIO->CanWriteFile(path);
	if (!isFileValid){
		return false;
	}
	else
	{
		ImageType_16bits::Pointer InputImage = ImageType_16bits::New();
		WriterType_16bits::Pointer Writer = WriterType_16bits::New();
		ImageType_16bits::IndexType start;
		start.Fill(0);
		ImageType_16bits::SizeType size;
		size[0] = width;
		size[1] = height;
		ImageType_16bits::RegionType region(start, size);
		InputImage->SetRegions(region);
		InputImage->Allocate();
		InputImage->FillBuffer(0);
		memcpy(InputImage->GetBufferPointer(), Image, sizeof(uint16)* width * height);
		itk::PNGImageIO::Pointer pngio = itk::PNGImageIO::New();
		Writer->SetFileName(path);
		Writer->SetInput(InputImage);
		Writer->SetImageIO(pngio);
		Writer->UseCompressionOn();
		try
		{
			Writer->Update();
		}
		catch (itk::ExceptionObject &)
		{
			std::cout << path << "\t write error!";
			return false;
		}
		return true;
	}

	
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值