VTK中利用vtkImageExtractComponents可以方便地提取彩色图像的各个颜色通道组分,提取出来的每一个组分数据就是一个灰度数据。
1 #include "vtkAutoInit.h"
2 VTK_MODULE_INIT(vtkRenderingOpenGL2);
3 VTK_MODULE_INIT(vtkInteractionStyle);
4
5 #include <vtkImageData.h>
6 #include <vtkSmartPointer.h>
7 #include <vtkImageExtractComponents.h>
8 #include <vtkRenderWindow.h>
9 #include <vtkRenderWindowInteractor.h>
10 #include <vtkInteractorStyleImage.h>
11 #include <vtkRenderer.h>
12 #include <vtkBMPReader.h>
13 #include <vtkImageActor.h>
14
15 //测试图像:../data/lena.bmp
16 int main(int argc, char* argv[])
17 {
18 vtkSmartPointer<vtkBMPReader> reader =
19 vtkSmartPointer<vtkBMPReader>::New();
20 reader->SetFileName ("lena.bmp");
21
22 vtkSmartPointer<vtkImageExtractComponents> extractRedFilter =
23 vtkSmartPointer<vtkImageExtractComponents>::New();
24 extractRedFilter->SetInputConnection(reader->GetOutputPort());
25 extractRedFilter->SetComponents(0);
26 extractRedFilter->Update();
27
28 vtkSmartPointer<vtkImageExtractComponents> extractGreenFilter =
29 vtkSmartPointer<vtkImageExtractComponents>::New();
30 extractGreenFilter->SetInputConnection(reader->GetOutputPort());
31 extractGreenFilter->SetComponents(1);
32 extractGreenFilter->Update();
33
34 vtkSmartPointer<vtkImageExtractComponents> extractBlueFilter =
35 vtkSmartPointer<vtkImageExtractComponents>::New();
36 extractBlueFilter->SetInputConnection(reader->GetOutputPort());
37 extractBlueFilter->SetComponents(2);
38 extractBlueFilter->Update();
39
40 // Create actors
41 vtkSmartPointer<vtkImageActor> inputActor =
42 vtkSmartPointer<vtkImageActor>::New();
43 inputActor->SetInputData(reader->GetOutput());
44
45 vtkSmartPointer<vtkImageActor> redActor =
46 vtkSmartPointer<vtkImageActor>::New();
47 redActor->SetInputData(extractRedFilter->GetOutput());
48
49 vtkSmartPointer<vtkImageActor> greenActor =
50 vtkSmartPointer<vtkImageActor>::New();
51 greenActor->SetInputData(extractGreenFilter->GetOutput());
52
53 vtkSmartPointer<vtkImageActor> blueActor =
54 vtkSmartPointer<vtkImageActor>::New();
55 blueActor->SetInputData(extractBlueFilter->GetOutput());
56
57 double inputViewport[4] = {0.0, 0.0, 0.25, 1.0};
58 double redViewport[4] = {0.25, 0.0, 0.5, 1.0};
59 double greenViewport[4] = {0.5, 0.0, 0.75, 1.0};
60 double blueViewport[4] = {0.75, 0.0, 1.0, 1.0};
61
62 vtkSmartPointer<vtkRenderer> inputRenderer =
63 vtkSmartPointer<vtkRenderer>::New();
64 inputRenderer->SetViewport(inputViewport);
65 inputRenderer->AddActor(inputActor);
66 inputRenderer->ResetCamera();
67 inputRenderer->SetBackground(1.0, 1.0, 1.0);
68
69 vtkSmartPointer<vtkRenderer> redRenderer =
70 vtkSmartPointer<vtkRenderer>::New();
71 redRenderer->SetViewport(redViewport);
72 redRenderer->AddActor(redActor);
73 redRenderer->ResetCamera();
74 redRenderer->SetBackground(1.0, 1.0, 1.0);
75
76 vtkSmartPointer<vtkRenderer> greenRenderer =
77 vtkSmartPointer<vtkRenderer>::New();
78 greenRenderer->SetViewport(greenViewport);
79 greenRenderer->AddActor(greenActor);
80 greenRenderer->ResetCamera();
81 greenRenderer->SetBackground(1.0, 1.0, 1.0);
82
83 vtkSmartPointer<vtkRenderer> blueRenderer =
84 vtkSmartPointer<vtkRenderer>::New();
85 blueRenderer->SetViewport(blueViewport);
86 blueRenderer->AddActor(blueActor);
87 blueRenderer->ResetCamera();
88 blueRenderer->SetBackground(1.0, 1.0, 1.0);
89
90 vtkSmartPointer<vtkRenderWindow> renderWindow =
91 vtkSmartPointer<vtkRenderWindow>::New();
92 renderWindow->AddRenderer(inputRenderer);
93 renderWindow->AddRenderer(redRenderer);
94 renderWindow->AddRenderer(greenRenderer);
95 renderWindow->AddRenderer(blueRenderer);
96
97 renderWindow->SetSize(1200, 300);
98 renderWindow->Render();
99 renderWindow->SetWindowName("ImageExtractComponentsExample");
100
101 vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =
102 vtkSmartPointer<vtkRenderWindowInteractor>::New();
103 vtkSmartPointer<vtkInteractorStyleImage> style =
104 vtkSmartPointer<vtkInteractorStyleImage>::New();
105
106 renderWindowInteractor->SetInteractorStyle(style);
107 renderWindowInteractor->SetRenderWindow(renderWindow);
108 renderWindowInteractor->Initialize();
109 renderWindowInteractor->Start();
110
111 return EXIT_SUCCESS;
112 }
分类:
VTK
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
2022-08-15 Qt item setZValue() 函数