/********************************************************************** 文件名: 5.4_CannyExample.cpp Copyright (c) 张晓东, 罗火灵. All rights reserved. 更多信息请访问: http://www.vtkchina.org (VTK中国) http://blog.csdn.net/www_doling_net (东灵工作室) **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include //测试图像:../data/lena-gray.jpg int main(int argc, char* argv[]) { if (argc < 2) { std::cout< reader = vtkSmartPointer::New(); reader->SetFileName(argv[1]); reader->Update(); vtkSmartPointer ic = vtkSmartPointer::New(); ic->SetOutputScalarTypeToFloat(); ic->SetInputConnection(reader->GetOutputPort()); vtkSmartPointer gs = vtkSmartPointer::New(); gs->SetInputConnection(ic->GetOutputPort()); gs->SetDimensionality(2); gs->SetRadiusFactors(1, 1, 0); vtkSmartPointer imgGradient = vtkSmartPointer::New(); imgGradient->SetInputConnection(gs->GetOutputPort()); imgGradient->SetDimensionality(2); vtkSmartPointer imgMagnitude = vtkSmartPointer::New(); imgMagnitude->SetInputConnection(imgGradient->GetOutputPort()); vtkSmartPointer nonMax = vtkSmartPointer::New(); nonMax->SetMagnitudeInput(imgMagnitude->GetOutput()); nonMax->SetVectorInput(imgGradient->GetOutput()); nonMax->SetDimensionality(2); vtkSmartPointer pad = vtkSmartPointer::New(); pad->SetInputConnection(imgGradient->GetOutputPort()); pad->SetOutputNumberOfScalarComponents(3); pad->SetConstant(0); vtkSmartPointer i2sp1 = vtkSmartPointer::New(); i2sp1->SetInputConnection(nonMax->GetOutputPort()); i2sp1->SetVectorInput(pad->GetOutput()); vtkSmartPointer imgLink = vtkSmartPointer::New(); imgLink->SetInput(i2sp1->GetOutput()); imgLink->SetGradientThreshold(2); vtkSmartPointer thresholdEdgels = vtkSmartPointer::New(); thresholdEdgels->SetInputConnection(imgLink->GetOutputPort()); thresholdEdgels->ThresholdByUpper(10); thresholdEdgels->AllScalarsOff(); vtkSmartPointer gf = vtkSmartPointer::New(); gf->SetInputConnection(thresholdEdgels->GetOutputPort()); vtkSmartPointer i2sp = vtkSmartPointer::New(); i2sp->SetInputConnection(imgMagnitude->GetOutputPort()); i2sp->SetVectorInput(pad->GetOutput()); vtkSmartPointer spe = vtkSmartPointer::New(); spe->SetInputConnection(gf->GetOutputPort()); spe->SetGradMaps(i2sp->GetStructuredPointsOutput()); vtkSmartPointer strip = vtkSmartPointer::New(); strip->SetInputConnection(spe->GetOutputPort()); vtkSmartPointer dsm = vtkSmartPointer::New(); dsm->SetInputConnection(strip->GetOutputPort()); dsm->ScalarVisibilityOff(); vtkSmartPointer planeActor = vtkSmartPointer::New(); planeActor->SetMapper(dsm); planeActor->GetProperty()->SetAmbient(1.0); planeActor->GetProperty()->SetDiffuse(0.0); planeActor->GetProperty()->SetColor(1.0, 0.0, 0.0); vtkSmartPointer originalActor = vtkSmartPointer::New(); originalActor->SetInput(reader->GetOutput()); double originalViewport[4] = {0.0, 0.0, 0.5, 1.0}; double gradviewport[4] = {0.5, 0.0, 1.0, 1.0}; vtkSmartPointer originalRenderer = vtkSmartPointer::New(); originalRenderer->SetViewport(originalViewport); originalRenderer->AddActor(originalActor); originalRenderer->ResetCamera(); originalRenderer->SetBackground(1.0, 1.0, 1.0); vtkSmartPointer gradRenderer = vtkSmartPointer::New(); gradRenderer->SetViewport(gradviewport); gradRenderer->AddActor(planeActor); gradRenderer->ResetCamera(); gradRenderer->SetBackground(1.0, 1.0, 1.0); vtkSmartPointer renderWindow = vtkSmartPointer::New(); renderWindow->SetSize(900, 300); renderWindow->AddRenderer(originalRenderer); renderWindow->AddRenderer(gradRenderer); renderWindow->Render(); renderWindow->SetWindowName("CannyExample"); vtkSmartPointer renderWindowInteractor = vtkSmartPointer::New(); vtkSmartPointer style = vtkSmartPointer::New(); renderWindowInteractor->SetInteractorStyle(style); renderWindowInteractor->SetRenderWindow(renderWindow); renderWindowInteractor->Initialize(); renderWindowInteractor->Start(); return EXIT_SUCCESS; }