ITK读取图片, 并重新写入图片文件, VTK显示

本文介绍如何使用ITK读取图像文件,并通过VTK进行图像显示的过程。包括设置输入输出文件路径、利用ITK读取图像、将ITK图像转换为VTK图像以及配置VTK渲染窗口等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/* 
 * ITK读取图片, 并重新写入图片文件, VTK显示
 * 2017-11-13
 *
 */

#include "itkImage.h"

//在读取png和tif图片时候,下面两个头文件都可以
//#include "itkImageSeriesReader.h"
#include "itkImageFileReader.h" 

  
#include "itkImageFileWriter.h"  

#include "itkImageToVTKImageFilter.h"

#include "vtkImageActor.h"    

#include "vtkRenderer.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"

#include  <vtkSmartPointer.h>  


int main()
{

	const unsigned int Dimension = 2;                    //定义图像维数

	//typedef unsigned char PixelType ;                  //定义像素类型:灰度图                 
	typedef itk::RGBPixel< unsigned char >   PixelType;  //定义像素类型:RGB图

	typedef itk::Image<PixelType , Dimension> ImageType ; 


	typedef itk::ImageFileReader< ImageType >  ReaderType;
	typedef itk::ImageFileWriter< ImageType >  WriterType;
 
	ReaderType::Pointer reader = ReaderType::New();
	WriterType::Pointer writer = WriterType::New();  

	const char * filename1 = "/home/zlf/Documents/VTK/VTKCODE/ITKReadWrite_VTKShow/娄倬瑜1.jpg";
	const char * filename2 = "/home/zlf/Documents/VTK/VTKCODE/ITKReadWrite_VTKShow/娄倬瑜2.jpg";

  	reader->SetFileName( filename1 );
	writer->SetFileName( filename2 );

  	reader->Update();

	ImageType::Pointer image = reader->GetOutput();  
	writer->SetInput( image );  
	writer->Update(); 

	////////////////////////////////////////////////////////////////////////

	// 已经用ITK读取数据,存储在reader里面
	// ITK TO VTK 
	typedef itk::ImageToVTKImageFilter< ImageType > itkTovtkFilterType;  
	itkTovtkFilterType::Pointer itkTovtkImageFilter = itkTovtkFilterType::New();  
	itkTovtkImageFilter->SetInput(reader->GetOutput());//设置图像数据从ITK转向VTK  
	itkTovtkImageFilter->Update();  


	// vtkImageActor在3D场景下渲染图像
	vtkSmartPointer<vtkImageActor> actor = vtkImageActor::New();  
	actor->SetInputData(itkTovtkImageFilter->GetOutput());  
	actor->InterpolateOff();  
	actor->Update();  


	//VTK渲染的一般步骤
	vtkSmartPointer<vtkRenderer> render = vtkRenderer::New();  
	render->AddActor(actor);  
      
	vtkSmartPointer<vtkRenderWindow> window = vtkRenderWindow::New();  
	window->SetSize(800, 600);  
	window->AddRenderer(render);  
      
	vtkSmartPointer<vtkRenderWindowInteractor> interactor = vtkRenderWindowInteractor::New();  
	interactor->SetRenderWindow(window);  
      
	interactor->Initialize();  
	interactor->Start();  

	return 0;

}


    // error: ‘InputImageType’ was not declared in this scope
    // typedef itk::ImageFileReader< InputImageType >  ReaderType;
    // 把 InputImageType 用 ImageType 代替


/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

# CMakeLists.txt
cmake_minimum_required(VERSION 2.8)

project(ITKReadWrite_VTKShow)

find_package(VTK REQUIRED)
find_package( ITK REQUIRED )
 
include(${VTK_USE_FILE} )
INCLUDE( ${ITK_USE_FILE} )

add_executable(ITKReadWrite_VTKShow  ITKReadWrite_VTKShow.cxx)
target_link_libraries(HelloWorld ${VTK_LIBRARIES} ${ITK_LIBRARIES})

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////












参考:http://blog.youkuaiyun.com/cuihaolong/article/details/53943981

参考: http://blog.youkuaiyun.com/ljp1919/article/details/41487505

参考:http://www.bubuko.com/infodetail-1190593.html


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值