总结:本博文是vtkImageViewer2和vtkImageActor用法及程序实现结果,属于学习笔记
#include"vtkSmartPointer.h"
#include"vtkMetaImageReader.h"
#include"vtkImageViewer2.h"
#include"vtkRenderer.h"
#include"vtkRenderWindow.h"
#include"vtkRenderWindowInteractor.h"
//vtkImageViewer2封装了vtk图像显示的可视化渲染引擎
int main(int argc,char* argv[]){
vtkSmartPointer<vtkMetaImageReader> reader = vtkSmartPointer<vtkMetaImageReader>::New();
reader->SetFileName("head.mhd");
reader->Update();
vtkSmartPointer<vtkImageViewer2> viewer = vtkSmartPointer<vtkImageViewer2>::New();
viewer->SetInputConnection(reader->GetOutputPort());
//设置基本属性
viewer->SetSize(640,480);
viewer->SetColorLevel(500); //设置窗宽
viewer->SetColorWindow(2000); //窗维
viewer->SetSlice(20); //切片索引
viewer->SetSliceOrientationToXY(); //切片的方向设置为XY平面方向
viewer->Render();
viewer->GetRenderer()->SetBackground(1, 1, 1);
viewer->GetRenderWindow()->SetWindowName("Image view 2D");
vtkSmartPointer<vtkRenderWindowInteractor> rwi = vtkSmartPointer<vtkRenderWindowInteractor>::New();
//设置交互
viewer->SetupInteractor(rwi);
rwi->Start();
return 0;
}
运行结果:
//vtkImageActor用法及显示
#include"vtkSmartPointer.h"
#include"vtkBMPReader.h"
#include"vtkImageActor.h"
#include"vtkRenderer.h"
#include"vtkRenderWindow.h"
#include"vtkRenderWindowInteractor.h"
#include"vtkInteractorStyleImage.h"
//读入图像后,依次建立vtkImageActor,vtkRender,vtkRenderWindow,vtkRenderWindowInteractor,并组装为管线。
//为了屏蔽旋转操作,建立vtkInteractorStyleImage对象,并通过rwi->SetInteractorStyle(style)设置交互对象。
int main(){
vtkSmartPointer<vtkBMPReader> reader = vtkSmartPointer<vtkBMPReader>::New();
reader->SetFileName("test.bmp");
reader->Update();
vtkSmartPointer<vtkImageActor> actor = vtkSmartPointer<vtkImageActor>::New();
actor->SetInputData(reader->GetOutput());
vtkSmartPointer<vtkRenderer> render = vtkSmartPointer<vtkRenderer>::New();
render->AddActor2D(actor);
render->ResetCamera();
render->SetBackground(1, 1, 1);
vtkSmartPointer<vtkRenderWindow> window = vtkSmartPointer<vtkRenderWindow>::New();
window->AddRenderer(render);
window->SetSize(640, 480);
window->SetWindowName("Imageviewer3D");
window->Render(); //调用的是vtkrenderwindow的render函数
vtkSmartPointer<vtkRenderWindowInteractor> rwi = vtkSmartPointer<vtkRenderWindowInteractor>::New();
vtkSmartPointer<vtkInteractorStyleImage> style = vtkSmartPointer<vtkInteractorStyleImage>::New();
rwi->SetInteractorStyle(style);
rwi->SetRenderWindow(window);
rwi->Initialize();
rwi->Start();
return 0;
}
//需要注意的是,vtkImageActor接收的图像vtkImageData数据类型必须为unsigned char类型,因此在显示之前,
//必要的时候需要利用vtkImageCast将图像数据类型转换为unsigned char。
运行结果:
参考链接:
https://blog.youkuaiyun.com/www_doling_net/article/details/8541534
https://blog.youkuaiyun.com/shenziheng1/article/details/54565337