VTK图像显示方式

用VTK显示图像的几种方式:

方式1:

读取数据-----映射(mapper)------演员(actor)-------渲染(render)-----渲染窗口(renwin)----交互方式

在console下实现的代码如下:

#include "vtkActor.h"

#include "vtkRenderer.h"

#include "vtkRenderWindow.h"

#include "vtkRenderWindowInteractor.h"

#include "vtkImageViewer.h"

#include "vtkImageViewer2.h"

#include"vtkPNGReader.h"

#include "vtkImageActor.h"

#include "vtkInteractorStyleImage.h"

#include "vtkActor2D.h"

#include "vtkAutoInit.h"

VTK_MODULE_INIT(vtkRenderingOpenGL2); // VTK was built with vtkRenderingOpenGL2
VTK_MODULE_INIT(vtkInteractionStyle);
//vtk show pic with the way of one
int main()

{

	int extent[6];

	vtkSmartPointer< vtkPNGReader>m_reader = vtkSmartPointer<vtkPNGReader>::New();

	m_reader->SetFileName("1.png");

	m_reader->SetDataByteOrderToLittleEndian();//the type of data reading 

	m_reader->SetDataScalarTypeToUnsignedChar();//the type of data

	m_reader->SetFileDimensionality(3);

	vtkSmartPointer<vtkImageMapper>mapper = vtkSmartPointer<vtkImageMapper>::New();

	mapper->SetInputConnection(m_reader->GetOutputPort());

	mapper->SetColorLevel(128);

	mapper->SetColorWindow(256);

	vtkSmartPointer<vtkActor2D>actor = vtkSmartPointer<vtkActor2D>::New();

	actor->SetMapper(mapper);

	vtkSmartPointer<vtkRenderer>m_Renderer = vtkSmartPointer<vtkRenderer>::New();

	vtkSmartPointer<vtkRenderWindow>m_RenWin = vtkSmartPointer<vtkRenderWindow>::New();

	m_RenWin->AddRenderer(m_Renderer);

	vtkSmartPointer<vtkRenderWindowInteractor>iren = vtkSmartPointer<vtkRenderWindowInteractor>::New();

	iren->SetRenderWindow(m_RenWin);

	vtkSmartPointer<vtkInteractorStyleImage>interactor = vtkSmartPointer<vtkInteractorStyleImage>::New();

	iren->SetInteractorStyle(interactor);

	m_Renderer->AddActor(actor);

	m_Renderer->SetBackground(0, 0, 0);

	m_RenWin->Render();

	m_reader->GetDataExtent(extent);

	iren->Initialize();

	iren->Start();

	return 0;

}


方式二:

图像数据读取----数据给imageactor----渲染显示

在console下实现如下

#include "vtkActor.h"

#include "vtkRenderer.h"

#include "vtkRenderWindow.h"

#include "vtkRenderWindowInteractor.h"

#include "vtkImageViewer.h"

#include "vtkImageViewer2.h"

#include"vtkPNGReader.h"

#include "vtkImageActor.h"

#include "vtkInteractorStyleImage.h"

#include "vtkActor2D.h"

#include "vtkAutoInit.h"

VTK_MODULE_INIT(vtkRenderingOpenGL2); // VTK was built with vtkRenderingOpenGL2
VTK_MODULE_INIT(vtkInteractionStyle);
//vtk show pic with the way of 2
int main()

{

	vtkSmartPointer<vtkPNGReader> m_reader = vtkSmartPointer<vtkPNGReader>::New();

	m_reader->SetFileName("1.png");

	m_reader->SetDataByteOrderToLittleEndian();

	m_reader->SetDataScalarTypeToUnsignedChar();

	m_reader->SetFileDimensionality(3);
	m_reader->Update();

	vtkSmartPointer<vtkImageActor>m_Actor = vtkSmartPointer<vtkImageActor>::New();

	m_Actor->SetInputData(m_reader->GetOutput());


	vtkSmartPointer<vtkRenderer>m_Renderer = vtkSmartPointer<vtkRenderer>::New();

	vtkSmartPointer<vtkRenderWindow>m_RenWin = vtkSmartPointer<vtkRenderWindow>::New();

	m_RenWin->AddRenderer(m_Renderer);

	vtkSmartPointer<vtkRenderWindowInteractor>iren = vtkSmartPointer<vtkRenderWindowInteractor>::New();

	iren->SetRenderWindow(m_RenWin);

	vtkSmartPointer<vtkInteractorStyleImage>interactor = vtkSmartPointer<vtkInteractorStyleImage>::New();

	iren->SetInteractorStyle(interactor);

	m_RenWin->SetSize(300, 300);

	m_Renderer->AddActor(m_Actor);

	m_Renderer->SetBackground(0.0, 0.0, 0.0);

	m_RenWin->Render();

	iren->Initialize();

	iren->Start();

	return 0;

}


方式3:

用ImageView2

console实现如下:

#include "vtkActor.h"

#include "vtkRenderer.h"

#include "vtkRenderWindow.h"

#include "vtkRenderWindowInteractor.h"

#include "vtkImageViewer.h"

#include "vtkImageViewer2.h"

#include"vtkPNGReader.h"

#include "vtkImageActor.h"

#include "vtkInteractorStyleImage.h"

#include "vtkActor2D.h"

#include "vtkAutoInit.h"

VTK_MODULE_INIT(vtkRenderingOpenGL2); // VTK was built with vtkRenderingOpenGL2
VTK_MODULE_INIT(vtkInteractionStyle);
//vtk show pic 3
int main()
{
	vtkSmartPointer<vtkPNGReader> reader =
		vtkSmartPointer<vtkPNGReader>::New();
	reader->SetFileName("1.png");
	reader->SetDataByteOrderToLittleEndian();
	reader->SetDataScalarTypeToUnsignedChar();
	reader->Update();

	vtkSmartPointer<vtkImageViewer2> imageViewer =
		vtkSmartPointer<vtkImageViewer2>::New();
	imageViewer->SetInputConnection(reader->GetOutputPort());

	vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =
		vtkSmartPointer<vtkRenderWindowInteractor>::New();
	imageViewer->SetupInteractor(renderWindowInteractor);

	imageViewer->SetColorLevel(128);
	imageViewer->SetColorWindow(256);
//	imageViewer->SetSlice(40);
//	imageViewer->SetSliceOrientationToXY();
	imageViewer->Render();

	imageViewer->GetRenderer()->SetBackground(1.0, 1.0, 1.0);
//	imageViewer->SetSize(640, 480);
	imageViewer->GetRenderWindow()->SetSize(640, 480);
	imageViewer->GetRenderWindow()->SetWindowName("DisplayImageExample");

	renderWindowInteractor->Start();

	return EXIT_SUCCESS;
}






  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要使用VTK显示图像数组,可以使用vtkImageDatavtkImageActor类。以下是一个简单的例子代码,其中假设图像数组是一个二维的灰度图像,大小为nxm: ```python import vtk import numpy as np # 创建vtkImageData对象 imageData = vtk.vtkImageData() imageData.SetDimensions(n, m, 1) imageData.AllocateScalars(vtk.VTK_UNSIGNED_CHAR, 1) # 将图像数组转换为VTK图像数据 scalars = imageData.GetPointData().GetScalars() for i in range(n): for j in range(m): scalars.SetTuple1(i*m+j, imageArray[i,j]) # 创建vtkImageActor对象并设置其属性 imageActor = vtk.vtkImageActor() imageActor.SetInputData(imageData) imageActor.GetProperty().SetColorWindow(255) imageActor.GetProperty().SetColorLevel(127.5) # 创建vtkRenderervtkRenderWindow对象,并将vtkImageActor添加到vtkRenderer中 renderer = vtk.vtkRenderer() renderWindow = vtk.vtkRenderWindow() renderWindow.AddRenderer(renderer) renderer.AddActor(imageActor) # 显示窗口 interactor = vtk.vtkRenderWindowInteractor() renderWindow.SetInteractor(interactor) renderWindow.Render() interactor.Start() ``` 在这个例子中,我们首先创建了一个vtkImageData对象,并将其大小设置为nxm,然后为图像数据分配内存。接着,我们将图像数组中的数据逐个复制到vtkImageData对象中。最后,我们创建了一个vtkImageActor对象,并将其添加到vtkRenderer中。我们还设置了vtkImageActor对象的颜色窗口和颜色级别属性,以便更好地显示图像。最后,我们创建了vtkRenderWindow对象,并将vtkRenderer添加到其中,然后显示窗口。 请注意,这只是一个简单的例子,实际应用中可能需要更多的代码来处理和显示图像数据。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值