图像灰度处理与边缘检测
图片是从网上下载,先将其处理为灰度图像,之后进行边缘检测。
#ifndef INITIAL_OPENGL #define INITIAL_OPENGL #include"vtkAutoInit.h" VTK_MODULE_INIT(vtkRenderingOpenGL2) VTK_MODULE_INIT(vtkInteractionStyle) #endif //转为灰度和滤波 int main() { vtkSmartPointerreader1 = 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