一杯清酒邀明月
天下本无事,庸人扰之而烦耳。
posts - 3121,comments - 209,views - 580万
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 }
复制代码

posted on   一杯清酒邀明月  阅读(148)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
历史上的今天:
2022-08-15 Qt item setZValue() 函数
< 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

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