首页 > 其他分享 >VTK 实例38:Sobel梯度算子(边缘检测)

VTK 实例38:Sobel梯度算子(边缘检测)

时间:2023-08-15 11:57:46浏览次数:32  
标签:GetOutputPort 38 1.0 Sobel VTK vtkSmartPointer renderWindow New include

  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 }

标签:GetOutputPort,38,1.0,Sobel,VTK,vtkSmartPointer,renderWindow,New,include
From: https://www.cnblogs.com/ybqjymy/p/17630964.html

相关文章

  • VTK 实例39:拉普拉斯算子(边缘检测)
    1#include"vtkAutoInit.h"2VTK_MODULE_INIT(vtkRenderingOpenGL2);3VTK_MODULE_INIT(vtkInteractionStyle);45#include<vtkSmartPointer.h>6#include<vtkImageData.h>7#include<vtkImageCanvasSource2D.h>8#include......
  • VTK 实例40:均值滤波(图像光滑)
    1#include"vtkAutoInit.h"2VTK_MODULE_INIT(vtkRenderingOpenGL2);3VTK_MODULE_INIT(vtkInteractionStyle);45#include<vtkSmartPointer.h>6#include<vtkImageData.h>7#include<vtkImageConvolve.h>8#include<vt......
  • VTK 实例31:灰度图像直方图
    1#include"vtkAutoInit.h"2VTK_MODULE_INIT(vtkRenderingOpenGL2);3VTK_MODULE_INIT(vtkInteractionStyle);45#include<vtkActor.h>6#include<vtkBarChartActor.h>7#include<vtkFieldData.h>8#include<v......
  • VTK 实例32:图像重采样(降采样)
    1#include"vtkAutoInit.h"2VTK_MODULE_INIT(vtkRenderingOpenGL2);3VTK_MODULE_INIT(vtkInteractionStyle);45#include<vtkSmartPointer.h>6#include<vtkImageData.h>7#include<vtkImageShiftScale.h>8#include<......
  • VTK 实例33:图像重采样(降和升采样)
    1#include"vtkAutoInit.h"2VTK_MODULE_INIT(vtkRenderingOpenGL2);3VTK_MODULE_INIT(vtkInteractionStyle);45#include<vtkSmartPointer.h>6#include<vtkImageData.h>7#include<vtkRenderWindow.h>8#include......
  • VTK 实例26:将BMP类型的RGB图像转换为灰度图像
    1#include"vtkAutoInit.h"2VTK_MODULE_INIT(vtkRenderingOpenGL2);3VTK_MODULE_INIT(vtkInteractionStyle);45#include<vtkSmartPointer.h>6#include<vtkImageData.h>7#include<vtkRenderWindow.h>8#include<vtk......
  • HDU 3829 Cat VS Dog 猫和狗(二分图)结题报告
    听学长说这道题很ex,但是思路想到的话还是挺简单的。可能是受上一道题(放置机器人)的启发,也是找互相冲突的点连线。但是并不是完全一样(废话)放置机器人那道题是找到冲突点连线后直接求最大匹配即可。这道题稍微把思路变换一下,求出最大完美匹配数\(n\)后,说明有\(n*2\)个人的喜好......
  • VTK 实例20:用vtkImageViewer2显示三维医学图像mhd的某个切面
    1#include"vtkAutoInit.h"2VTK_MODULE_INIT(vtkRenderingOpenGL2);3VTK_MODULE_INIT(vtkInteractionStyle);45#include<vtkSmartPointer.h>6#include<vtkImageViewer2.h>7#include<vtkRenderWindow.h>8#include<......
  • VTK 实例6:加入灯光(蓝色背景+白色演员+红色环境光)
    1#include"vtkAutoInit.h"2VTK_MODULE_INIT(vtkRenderingOpenGL2);3VTK_MODULE_INIT(vtkInteractionStyle);45#include<vtkConeSource.h>//源数据6#include<vtkPolyDataMapper.h>//数据映射7#include<vtkRenderer.h>//绘制器8#......
  • VTK 实例5:设置椎体颜色属性
    1#include"vtkAutoInit.h"2VTK_MODULE_INIT(vtkRenderingOpenGL2);3VTK_MODULE_INIT(vtkInteractionStyle);45#include<vtkConeSource.h>//源数据6#include<vtkPolyDataMapper.h>//数据映射7#include<vtkRenderer.h>//绘制器8#......