VTK 图像融合
效果图

代码如下:
vtkSmartPointer<vtkJPEGReader> reader = vtkSmartPointer<vtkJPEGReader>::New();
reader->SetFileName("d:/h1.jpg");
reader->Update();
vtkSmartPointer<vtkImageCanvasSource2D> back = vtkSmartPointer<vtkImageCanvasSource2D>::New();
back->SetNumberOfScalarComponents(1);
back->SetScalarTypeToUnsignedChar();
back->SetExtent(0, 512, 0, 512, 0, 0);
back->SetDrawColor(0.0);
back->FillBox(0, 512, 0, 512);
back->SetDrawColor(255);
back->FillBox(100, 400, 100, 400);
back->Update();
vtkSmartPointer<vtkImageBlend> blend = vtkSmartPointer<vtkImageBlend>::New();
blend->AddInputData((vtkDataObject*)reader->GetOutput());
blend->AddInputData((vtkDataObject*)back->GetOutput());
blend->SetOpacity(0, 0.7);
blend->SetOpacity(1, 0.3);
blend->Update();
double leftview[4] = {0,0, 0.33,1};
double midview[4] = {0.33,0, 0.66,1};
double rightview[4] = {0.66,0, 1.0,1};
vtkSmartPointer<vtkImageActor> actor1 = vtkSmartPointer<vtkImageActor>::New();
actor1->GetMapper()->SetInputConnection(reader->GetOutputPort());
pRenderer->AddActor(actor1);
pRenderer->SetViewport(leftview);
pRenderer->ResetCamera();
pRenderer->SetBackground(1,0,0);
vtkSmartPointer<vtkImageActor> actor2 = vtkSmartPointer<vtkImageActor>::New();
actor2->GetMapper()->SetInputConnection(back->GetOutputPort());
vtkSmartPointer<vtkRenderer> render2 = vtkSmartPointer<vtkRenderer>::New();
render2->SetViewport(midview);
render2->AddActor(actor2);
render2->ResetCamera();
render2->SetBackground(0,1,0);
vtkSmartPointer<vtkImageActor> actor3 = vtkSmartPointer<vtkImageActor>::New();
actor3->GetMapper()->SetInputConnection(blend->GetOutputPort());
vtkSmartPointer<vtkRenderer> render3 = vtkSmartPointer<vtkRenderer>::New();
render3->SetViewport(rightview);
render3->AddActor(actor3);
render3->ResetCamera();
render3->SetBackground(0,0,1);
pRenderWindow->AddRenderer(pRenderer);
pRenderWindow->AddRenderer(render2);
pRenderWindow->AddRenderer(render3);

浙公网安备 33010602011771号