zoukankan      html  css  js  c++  java
  • VTK 图像基本操作_单颜色通道图像合成彩色

    1.三张灰度图像合成彩色图

    我们可以提取彩色的图像的各个颜色分量,那么同样也可以将灰度图像合并成为一个彩色图像。VTK中提供vtkImageAppendComponents类来合成彩色图像,其输入需要提供三个灰度图像。
    下面实例:
      1 #include <vtkAutoInit.h>
      2 VTK_MODULE_INIT(vtkRenderingOpenGL);
      3  
      4 #include <vtkSmartPointer.h>
      5 #include <vtkImageCanvasSource2D.h>
      6 #include <vtkImageAppendComponents.h>
      7 #include <vtkImageActor.h>
      8 #include <vtkRenderer.h>
      9 #include <vtkRenderWindow.h>
     10 #include <vtkRenderWindowInteractor.h>
     11 #include <vtkInteractorStyleImage.h>
     12  
     13 int main()
     14 {
     15     vtkSmartPointer<vtkImageCanvasSource2D> red =
     16         vtkSmartPointer<vtkImageCanvasSource2D>::New();
     17     red->SetScalarTypeToUnsignedChar();
     18     red->SetNumberOfScalarComponents(1);
     19     red->SetExtent(0, 100, 0, 100, 0, 0);
     20     red->SetDrawColor(0, 0, 0, 0);
     21     red->FillBox(0, 100, 0, 100);
     22     red->SetDrawColor(255, 0, 0, 0);
     23     red->FillBox(20, 40, 20, 40);
     24     red->Update();
     25  
     26     vtkSmartPointer<vtkImageCanvasSource2D> green =
     27         vtkSmartPointer<vtkImageCanvasSource2D>::New();
     28     green->SetScalarTypeToUnsignedChar();
     29     green->SetNumberOfScalarComponents(1);
     30     green->SetExtent(0, 100, 0, 100, 0, 0);
     31     green->SetDrawColor(0, 0, 0, 0);
     32     green->FillBox(0, 100, 0, 100);
     33     green->SetDrawColor(255, 0, 0, 0);
     34     green->FillBox(30, 50, 30, 50);
     35     green->Update();
     36  
     37     vtkSmartPointer<vtkImageCanvasSource2D> blue =
     38         vtkSmartPointer<vtkImageCanvasSource2D>::New();
     39     blue->SetScalarTypeToUnsignedChar();
     40     blue->SetNumberOfScalarComponents(1);
     41     blue->SetExtent(0, 100, 0, 100, 0, 0);
     42     blue->SetDrawColor(0, 0, 0, 0);
     43     blue->FillBox(0, 100, 0, 100);
     44     blue->SetDrawColor(255, 0, 0, 0);
     45     blue->FillBox(40, 60, 40, 60);
     46     blue->Update();
     47  
     48     vtkSmartPointer<vtkImageAppendComponents> appendFilter =
     49         vtkSmartPointer<vtkImageAppendComponents>::New();
     50     appendFilter->SetInputConnection(0, red->GetOutputPort());
     51     appendFilter->AddInputConnection(0, green->GetOutputPort());
     52     appendFilter->AddInputConnection(0, blue->GetOutputPort());
     53     appendFilter->Update();
     54  
     55     vtkSmartPointer<vtkImageActor> redActor =
     56         vtkSmartPointer<vtkImageActor>::New();
     57     redActor->SetInputData(red->GetOutput());
     58  
     59     vtkSmartPointer<vtkImageActor> greenActor =
     60         vtkSmartPointer<vtkImageActor>::New();
     61     greenActor->SetInputData(green->GetOutput());
     62  
     63     vtkSmartPointer<vtkImageActor> blueActor =
     64         vtkSmartPointer<vtkImageActor>::New();
     65     blueActor->SetInputData(blue->GetOutput());
     66  
     67     vtkSmartPointer<vtkImageActor> combinedActor =
     68         vtkSmartPointer<vtkImageActor>::New();
     69     combinedActor->SetInputData(appendFilter->GetOutput());
     70  
     71     // Define viewport ranges
     72     // (xmin, ymin, xmax, ymax)
     73     double redViewport[4] = { 0.0, 0.0, 0.25, 1.0 };
     74     double greenViewport[4] = { 0.25, 0.0, 0.5, 1.0 };
     75     double blueViewport[4] = { 0.5, 0.0, 0.75, 1.0 };
     76     double combinedViewport[4] = { 0.75, 0.0, 1.0, 1.0 };
     77  
     78     // Setup renderers
     79     vtkSmartPointer<vtkRenderer> redRenderer =
     80         vtkSmartPointer<vtkRenderer>::New();
     81     redRenderer->SetViewport(redViewport);
     82     redRenderer->AddActor(redActor);
     83     redRenderer->ResetCamera();
     84     redRenderer->SetBackground(1.0, 1.0, 1.0);
     85  
     86     vtkSmartPointer<vtkRenderer> greenRenderer =
     87         vtkSmartPointer<vtkRenderer>::New();
     88     greenRenderer->SetViewport(greenViewport);
     89     greenRenderer->AddActor(greenActor);
     90     greenRenderer->ResetCamera();
     91     greenRenderer->SetBackground(1.0, 1.0, 1.0);
     92  
     93     vtkSmartPointer<vtkRenderer> blueRenderer =
     94         vtkSmartPointer<vtkRenderer>::New();
     95     blueRenderer->SetViewport(blueViewport);
     96     blueRenderer->AddActor(blueActor);
     97     blueRenderer->ResetCamera();
     98     blueRenderer->SetBackground(1.0, 1.0, 1.0);
     99  
    100     vtkSmartPointer<vtkRenderer> combinedRenderer =
    101         vtkSmartPointer<vtkRenderer>::New();
    102     combinedRenderer->SetViewport(combinedViewport);
    103     combinedRenderer->AddActor(combinedActor);
    104     combinedRenderer->ResetCamera();
    105     combinedRenderer->SetBackground(1.0, 1.0, 1.0);
    106  
    107     vtkSmartPointer<vtkRenderWindow> renderWindow =
    108         vtkSmartPointer<vtkRenderWindow>::New();
    109     renderWindow->AddRenderer(redRenderer);
    110     renderWindow->AddRenderer(greenRenderer);
    111     renderWindow->AddRenderer(blueRenderer);
    112     renderWindow->AddRenderer(combinedRenderer);
    113     renderWindow->SetSize(1200, 300);
    114     renderWindow->Render();
    115     renderWindow->SetWindowName("ImageAppendComponentsExample");
    116  
    117     vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =
    118         vtkSmartPointer<vtkRenderWindowInteractor>::New();
    119     vtkSmartPointer<vtkInteractorStyleImage> style =
    120         vtkSmartPointer<vtkInteractorStyleImage>::New();
    121  
    122     renderWindowInteractor->SetInteractorStyle(style);
    123     renderWindowInteractor->SetRenderWindow(renderWindow);
    124     renderWindowInteractor->Initialize();
    125     renderWindowInteractor->Start();
    126  
    127     return 0;
    128 }
    输出结果:
  • 相关阅读:
    AJAX聊天室小DEMO(讨厌JS,IE下有问题已解决)
    [ZT]线索二叉树(C#数据结构五)
    栈(C#数据结构学习二)
    eclipse 安装 resin 3 步骤
    解决全局utf8编码下asp.net接收gb2312乱码的问题
    模板里的控件要用FindControl(id)方法读取
    OpenSessionInView
    asp:button控件调用js函数不刷新方法
    OFFICE 出现“正在配置”的解决方法
    开发经验
  • 原文地址:https://www.cnblogs.com/ybqjymy/p/14241311.html
Copyright © 2011-2022 走看看