一杯清酒邀明月
天下本无事,庸人扰之而烦耳。
posts - 3121,comments - 209,views - 578万

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 }
复制代码
输出结果:
posted on   一杯清酒邀明月  阅读(460)  评论(0编辑  收藏  举报
编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
历史上的今天:
2020-01-06 VisionPro 图标工具说明
2020-01-06 Qt OpenCV::Mat与Qt::QImage相互转换
2020-01-06 QT .和::和:和->
2020-01-06 Qt QImage的浅拷贝与深拷贝
2020-01-06 Qt QImag图像保存、格式转换
2020-01-06 Qt 获取当前时间
2020-01-06 Qt 信号阻塞和断开
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示