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