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);