




1 #include "vtkAutoInit.h"
2 VTK_MODULE_INIT(vtkRenderingOpenGL2);
3 VTK_MODULE_INIT(vtkInteractionStyle);
4
5 #include <vtkSmartPointer.h>
6 #include <vtkImageMathematics.h>
7 #include <vtkImageData.h>
8 #include <vtkImageSobel2D.h>
9 #include <vtkImageMagnitude.h>
10 #include <vtkImageExtractComponents.h>
11 #include <vtkImageShiftScale.h>
12 #include <vtkRenderWindow.h>
13 #include <vtkRenderWindowInteractor.h>
14 #include <vtkInteractorStyleImage.h>
15 #include <vtkRenderer.h>
16 #include <vtkImageActor.h>
17 #include <vtkJPEGReader.h>
18
19 //测试图像:../data/lena-gray.jpg
20 int main(int argc, char* argv[])
21 {
22 vtkSmartPointer<vtkJPEGReader> reader =
23 vtkSmartPointer<vtkJPEGReader>::New();
24 reader->SetFileName("lena-gray.jpg");
25 reader->Update();
26
27 vtkSmartPointer<vtkImageSobel2D> sobelFilter =
28 vtkSmartPointer<vtkImageSobel2D>::New();
29 sobelFilter->SetInputConnection(reader->GetOutputPort());
30
31 vtkSmartPointer<vtkImageExtractComponents> extractXFilter =
32 vtkSmartPointer<vtkImageExtractComponents>::New();
33 extractXFilter->SetComponents(0);
34 extractXFilter->SetInputConnection(sobelFilter->GetOutputPort());
35 extractXFilter->Update();
36
37 double xRange[2];
38 extractXFilter->GetOutput()->GetScalarRange(xRange);
39
40 vtkSmartPointer<vtkImageMathematics> xImageAbs =
41 vtkSmartPointer<vtkImageMathematics>::New();
42 xImageAbs->SetOperationToAbsoluteValue();
43 xImageAbs->SetInputConnection(extractXFilter->GetOutputPort());
44 xImageAbs->Update();
45
46 vtkSmartPointer<vtkImageShiftScale> xShiftScale =
47 vtkSmartPointer<vtkImageShiftScale>::New();
48 xShiftScale->SetOutputScalarTypeToUnsignedChar();
49 xShiftScale->SetScale( 255 / xRange[1] );
50 xShiftScale->SetInputConnection(xImageAbs->GetOutputPort());
51 xShiftScale->Update();
52
53 vtkSmartPointer<vtkImageExtractComponents> extractYFilter =
54 vtkSmartPointer<vtkImageExtractComponents>::New();
55 extractYFilter->SetComponents(1);
56 extractYFilter->SetInputConnection(sobelFilter->GetOutputPort());
57 extractYFilter->Update();
58
59 double yRange[2];
60 extractYFilter->GetOutput()->GetScalarRange(yRange);
61
62 vtkSmartPointer<vtkImageMathematics> yImageAbs =
63 vtkSmartPointer<vtkImageMathematics>::New();
64 yImageAbs->SetOperationToAbsoluteValue();
65 yImageAbs->SetInputConnection(extractYFilter->GetOutputPort());
66 yImageAbs->Update();
67
68 vtkSmartPointer<vtkImageShiftScale> yShiftScale =
69 vtkSmartPointer<vtkImageShiftScale>::New();
70 yShiftScale->SetOutputScalarTypeToUnsignedChar();
71 yShiftScale->SetScale( 255 / yRange[1] );
72 yShiftScale->SetInputConnection(yImageAbs->GetOutputPort());
73 yShiftScale->Update();
74
75 vtkSmartPointer<vtkImageActor> originalActor =
76 vtkSmartPointer<vtkImageActor>::New();
77 originalActor->SetInputData(reader->GetOutput());
78
79 vtkSmartPointer<vtkImageActor> xActor =
80 vtkSmartPointer<vtkImageActor>::New();
81 xActor->SetInputData(xShiftScale->GetOutput());
82
83 vtkSmartPointer<vtkImageActor> yActor =
84 vtkSmartPointer<vtkImageActor>::New();
85 yActor->SetInputData(yShiftScale->GetOutput());
86
87 double originalViewport[4] = {0.0, 0.0, 0.33, 1.0};
88 double xViewport[4] = {0.33, 0.0, 0.66, 1.0};
89 double yViewport[4] = {0.66, 0.0, 1.0, 1.0};
90
91 vtkSmartPointer<vtkRenderer> originalRenderer =
92 vtkSmartPointer<vtkRenderer>::New();
93 originalRenderer->SetViewport(originalViewport);
94 originalRenderer->AddActor(originalActor);
95 originalRenderer->ResetCamera();
96 originalRenderer->SetBackground(1.0, 1.0, 1.0);
97
98 vtkSmartPointer<vtkRenderer> xRenderer =
99 vtkSmartPointer<vtkRenderer>::New();
100 xRenderer->SetViewport(xViewport);
101 xRenderer->AddActor(xActor);
102 xRenderer->ResetCamera();
103 xRenderer->SetBackground(1.0, 1.0, 1.0);
104
105 vtkSmartPointer<vtkRenderer> yRenderer =
106 vtkSmartPointer<vtkRenderer>::New();
107 yRenderer->SetViewport(yViewport);
108 yRenderer->AddActor(yActor);
109 yRenderer->ResetCamera();
110 yRenderer->SetBackground(1.0, 1.0, 1.0);
111
112 vtkSmartPointer<vtkRenderWindow> renderWindow =
113 vtkSmartPointer<vtkRenderWindow>::New();
114 renderWindow->SetSize(1200, 300);
115 renderWindow->AddRenderer(originalRenderer);
116 renderWindow->AddRenderer(xRenderer);
117 renderWindow->AddRenderer(yRenderer);
118 renderWindow->Render();
119 renderWindow->SetWindowName("SobelExample");
120
121 vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =
122 vtkSmartPointer<vtkRenderWindowInteractor>::New();
123 vtkSmartPointer<vtkInteractorStyleImage> style =
124 vtkSmartPointer<vtkInteractorStyleImage>::New();
125
126 renderWindowInteractor->SetInteractorStyle(style);
127 renderWindowInteractor->SetRenderWindow(renderWindow);
128 renderWindowInteractor->Initialize();
129 renderWindowInteractor->Start();
130
131 return EXIT_SUCCESS;
132 }


【推荐】国内首个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() 函数