VTK生成Mask

 // Create an image of a rectangle
    vtkNew<vtkImageCanvasSource2D> source;
    source->SetScalarTypeToUnsignedChar();
    source->SetNumberOfScalarComponents(1);
    source->SetExtent(0, 250, 0, 250, 0, 0);

    // Create a red image
    source->SetDrawColor(0,0,0);//创建黑色背景
    source->FillBox(0,250,0,250);//填充颜色
    source->Update();

    // Create a rectanglular mask
    vtkNew<vtkImageCanvasSource2D> maskSource;
    maskSource->SetScalarTypeToUnsignedChar();
    maskSource->SetNumberOfScalarComponents(1);
    maskSource->SetExtent(0, 250, 0, 250, 0, 0);

    // Initialize the mask to black
    maskSource->SetDrawColor(255,0,0);
    maskSource->DrawCircle(125, 125, 50);//白色mask 圆圈
    maskSource->FillPixel(125,125);//填充颜色
    maskSource->Update();

    vtkNew<vtkImageMask> maskFilter;
    maskFilter->SetInputConnection(0, source->GetOutputPort());
    maskFilter->SetInputConnection(1, maskSource->GetOutputPort());
    maskFilter->SetMaskedOutputValue(0,1,0);
    maskFilter->Update();

    vtkNew<vtkImageMask> inverseMaskFilter ;
    inverseMaskFilter->SetInputConnection(0, source->GetOutputPort());
    inverseMaskFilter->SetInputConnection(1, maskSource->GetOutputPort());
    inverseMaskFilter->SetMaskedOutputValue(0,1,0);
    inverseMaskFilter->NotMaskOn();
    inverseMaskFilter->Update();

    // Create actors
    vtkNew<vtkImageActor> originalActor ;
    originalActor->GetMapper()->SetInputConnection(source->GetOutputPort());

    vtkNew<vtkImageActor> maskActor ;
    maskActor->GetMapper()->SetInputConnection(maskSource->GetOutputPort());

    vtkNew<vtkImageActor> maskedActor ;
    maskedActor->GetMapper()->SetInputConnection(maskFilter->GetOutputPort());

    vtkNew<vtkImageActor> inverseMaskedActor ;
    inverseMaskedActor->GetMapper()->SetInputConnection(inverseMaskFilter->GetOutputPort());

    // Define viewport ranges
    // (xmin, ymin, xmax, ymax)
    double maskViewport1[4] = { 0.00, 0.0, 0.25, 1.0};
    double maskViewport2[4] = { 0.25, 0.0, 0.50, 1.0};
    double maskViewport3[4] = { 0.50, 0.0, 0.75, 1.0};
    double maskViewport4[4] = { 0.75, 0.0, 1.00, 1.0};

    // Setup renderers
    vtkNew<vtkRenderer> originalRenderer ;
    originalRenderer->SetViewport(maskViewport1);
    originalRenderer->AddActor(originalActor);
    originalRenderer->ResetCamera();
    originalRenderer->SetBackground(.4, .5, .6);

    vtkNew<vtkRenderer> maskRenderer ;
    maskRenderer->SetViewport(maskViewport2);
    maskRenderer->AddActor(maskActor);
    maskRenderer->ResetCamera();
    maskRenderer->SetBackground(.4, .5, .6);

    vtkNew<vtkRenderer> maskedRenderer ;
    maskedRenderer->SetViewport(maskViewport3);
    maskedRenderer->AddActor(maskedActor);
    maskedRenderer->ResetCamera();
    maskedRenderer->SetBackground(.4, .5, .6);

    vtkNew<vtkRenderer> inverseMaskedRenderer ;
    inverseMaskedRenderer->SetViewport(maskViewport4);
    inverseMaskedRenderer->AddActor(inverseMaskedActor);
    inverseMaskedRenderer->ResetCamera();
    inverseMaskedRenderer->SetBackground(.4, .5, .6);

    vtkNew<vtkRenderWindow> renderWindow ;
    renderWindow->SetSize(1000, 250);
    renderWindow->AddRenderer(originalRenderer);
    renderWindow->AddRenderer(maskRenderer);
    renderWindow->AddRenderer(maskedRenderer);
    renderWindow->AddRenderer(inverseMaskedRenderer);

    vtkNew<vtkRenderWindowInteractor> renderWindowInteractor ;
    vtkNew<vtkInteractorStyleImage> style ;

    renderWindowInteractor->SetInteractorStyle(style);

    renderWindowInteractor->SetRenderWindow(renderWindow);
    renderWindow->Render();
    renderWindowInteractor->Initialize();

    renderWindowInteractor->Start();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值