vtk学习之vtkImageBlend

参考博客:VTK修炼之道16:图像处理_窗口分割和图像融合(Viewport&vtkImageBlend)_vtkviewport_沈子恒的博客-CSDN博客主要找一张.jpg的图片,然后路径如果找不到的话,就用绝对路径。这个功能就是实现多张图片融合的效果,下面看下代码:

int main()
{
	vtkSmartPointer<vtkJPEGReader> jpgReader = vtkSmartPointer<vtkJPEGReader>::New();
	jpgReader->SetFileName("234.jpg");
	jpgReader->Update();

	vtkSmartPointer<vtkImageCanvasSource2D> source2D = vtkSmartPointer<vtkImageCanvasSource2D>::New();
	source2D->SetNumberOfScalarComponents(1);
	source2D->SetScalarTypeToUnsignedChar();
	source2D->SetExtent(0, 512, 0, 512, 0, 0);
	source2D->SetDrawColor(0, 0, 0);
	source2D->FillBox(0, 512, 0, 512);
	source2D->SetDrawColor(255, 255, 255);
	source2D->FillBox(100, 400, 100, 400);
	source2D->Update();

	//融合
	vtkSmartPointer<vtkImageBlend> blendImage = vtkSmartPointer<vtkImageBlend>::New();
	blendImage->AddInputData(jpgReader->GetOutput());
	blendImage->AddInputData(source2D->GetOutput());
	blendImage->SetOpacity(0, 0.5);
	blendImage->SetOpacity(1, 0.7);
	blendImage->Update();

	//渲染引擎
	vtkSmartPointer<vtkImageActor> actorImage1 = vtkSmartPointer<vtkImageActor>::New();
	actorImage1->SetInputData(jpgReader->GetOutput());

	vtkSmartPointer<vtkImageActor> actorImage2 = vtkSmartPointer<vtkImageActor>::New();
	actorImage2->SetInputData(source2D->GetOutput());

	vtkSmartPointer<vtkImageActor> blend_Actor =vtkSmartPointer<vtkImageActor>::New();
	blend_Actor->SetInputData(blendImage->GetOutput());

	//定义视窗大小(xmin.ymin,xmax,ymax)
    //按window的尺寸进行比例分割
	double leftView[4] = { 0,0,0.33,1 };
	double midView[4] = { 0.33,0,0.66,1 };
	double rightView[4] = { 0.66,0,1,1 };
	//render
	vtkSmartPointer<vtkRenderer> render1 = vtkSmartPointer<vtkRenderer>::New();
	render1->SetViewport(leftView);
	render1->AddActor(actorImage1);
	render1->ResetCamera();
	render1->SetBackground(0, 0, 0);

	vtkSmartPointer<vtkRenderer> render2 = vtkSmartPointer<vtkRenderer>::New();
	render2->SetViewport(midView);
	render2->AddActor(actorImage2);
	render2->ResetCamera();
	render2->SetBackground(0, 0, 0);

	vtkSmartPointer<vtkRenderer> render3 = vtkSmartPointer<vtkRenderer>::New();
	render3->SetViewport(rightView);
	render3->AddActor(blend_Actor);
	render3->ResetCamera();
	render3->SetBackground(0, 0, 0);

	//window
	vtkSmartPointer<vtkRenderWindow> renderwindow = vtkSmartPointer<vtkRenderWindow>::New();
	renderwindow->AddRenderer(render1);
	renderwindow->AddRenderer(render2);
	renderwindow->AddRenderer(render3);
	renderwindow->SetSize(640, 320);
	renderwindow->SetWindowName("Image-Blend");
	renderwindow->Render();

	//interactor
	vtkSmartPointer<vtkRenderWindowInteractor> interactor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
	vtkSmartPointer<vtkInteractorStyleImage> style = vtkSmartPointer<vtkInteractorStyleImage>::New();
	interactor->SetInteractorStyle(style);
	interactor->SetRenderWindow(renderwindow);
	interactor->Initialize();
	interactor->Start();

	return 0;
}

最后看下融合的效果:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值