/*
* 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