图像灰度处理与边缘检测
图片是从网上下载,先将其处理为灰度图像,之后进行边缘检测。
#ifndef INITIAL_OPENGL
#define INITIAL_OPENGL
#include"vtkAutoInit.h"
VTK_MODULE_INIT(vtkRenderingOpenGL2)
VTK_MODULE_INIT(vtkInteractionStyle)
#endif
//转为灰度和滤波
int main()
{
vtkSmartPointer<vtkJPEGReader> reader1 =
vtkSmartPointer<vtkJPEGReader>::New();
reader1->SetFileName("D:\\QTData\\Vtk-new\\figure2.jpg");
reader1->Update();
//图像灰度化
vtkSmartPointer<vtkImageLuminance> luminanceFilter =
vtkSmartPointer<vtkImageLuminance>::New();
luminanceFilter->SetInputConnection(reader1->GetOutputPort());
luminanceFilter->Update();
//计算图像梯度
vtkSmartPointer<vtkImageGradient> imgGradient =
vtkSmartPointer<vtkImageGradient>::New();
imgGradient->SetInputConnection(luminanceFilter->GetOutputPort());
imgGradient->SetDimensionality(2);//图像维数
//计算梯度向量的2范数,即向量的模
vtkSmartPointer<vtkImageMagnitude> imgMagnitude =
vtkSmartPointer<vtkImageMagnitude>::New();
imgMagnitude->SetInputConnection(imgGradient->GetOutputPort());
imgMagnitude->Update();
double Range[2];
vtkSmartPointer<vtkImageData> getRange =
vtkSmartPointer<vtkImageData>::New();
imgMagnitude->GetOutput()->GetScalarRange(Range);//图像灰度范围最小值、最大值
//调整图像的数据范围
vtkSmartPointer<vtkImageShiftScale> imgShiftScale =
vtkSmartPointer<vtkImageShiftScale>::New();
imgShiftScale->SetOutputScalarTypeToUnsignedChar(); //强制类型转换 0~255
imgShiftScale->SetScale(255 / Range[1]); //灰度映射间距
imgShiftScale->SetInputConnection(imgMagnitude->GetOutputPort());
imgShiftScale->Update();
vtkSmartPointer<vtkImageActor> origActor =
vtkSmartPointer<vtkImageActor>::New();
origActor->SetInputData(reader1->GetOutput());
vtkSmartPointer<vtkImageActor> GradientActor =
vtkSmartPointer<vtkImageActor>::New();
GradientActor->SetInputData(imgShiftScale->GetOutput());
double origView[4] = { 0, 0, 0.5, 1 };
double gradientView[4] = { 0.5, 0, 1, 1 };
vtkSmartPointer<vtkRenderer> origRender =
vtkSmartPointer<vtkRenderer>::New();
origRender->SetViewport(origView);
origRender->AddActor(origActor);
origRender->ResetCamera();
origRender->SetBackground(1.0, 0, 0);
vtkSmartPointer<vtkRenderer> gradientRender =
vtkSmartPointer<vtkRenderer>::New();
gradientRender->SetViewport(gradientView);
gradientRender->AddActor(GradientActor);
gradientRender->ResetCamera();
gradientRender->SetBackground(1, 1, 1);
vtkSmartPointer<vtkRenderWindow> rw =
vtkSmartPointer<vtkRenderWindow>::New();
rw->AddRenderer(origRender);
rw->AddRenderer(gradientRender);
rw->SetSize(640, 320);
rw->SetWindowName("Image Gradient");
vtkSmartPointer<vtkRenderWindowInteractor> rwi =
vtkSmartPointer<vtkRenderWindowInteractor>::New();
vtkSmartPointer<vtkInteractorStyleImage> style =
vtkSmartPointer<vtkInteractorStyleImage>::New();
rwi->SetRenderWindow(rw);
rwi->SetInteractorStyle(style);
rwi->Initialize();
rwi->Start();
return 0;
}
实现结果如下图所示:

参考:https://www.cnblogs.com/ybqjymy/p/14241281.html
https://blog.csdn.net/shenziheng1/article/details/54747184

浙公网安备 33010602011771号