/********************************************************************** 文件名: 5.4_SobelExample.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 //测试图像:../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 sobelFilter = vtkSmartPointer::New(); sobelFilter->SetInputConnection(reader->GetOutputPort()); vtkSmartPointer extractXFilter = vtkSmartPointer::New(); extractXFilter->SetComponents(0); extractXFilter->SetInputConnection(sobelFilter->GetOutputPort()); extractXFilter->Update(); double xRange[2]; extractXFilter->GetOutput()->GetScalarRange(xRange); vtkSmartPointer xImageAbs = vtkSmartPointer::New(); xImageAbs->SetOperationToAbsoluteValue(); xImageAbs->SetInputConnection(extractXFilter->GetOutputPort()); xImageAbs->Update(); vtkSmartPointer xShiftScale = vtkSmartPointer::New(); xShiftScale->SetOutputScalarTypeToUnsignedChar(); xShiftScale->SetScale( 255 / xRange[1] ); xShiftScale->SetInputConnection(xImageAbs->GetOutputPort()); xShiftScale->Update(); vtkSmartPointer extractYFilter = vtkSmartPointer::New(); extractYFilter->SetComponents(1); extractYFilter->SetInputConnection(sobelFilter->GetOutputPort()); extractYFilter->Update(); double yRange[2]; extractYFilter->GetOutput()->GetScalarRange(yRange); vtkSmartPointer yImageAbs = vtkSmartPointer::New(); yImageAbs->SetOperationToAbsoluteValue(); yImageAbs->SetInputConnection(extractYFilter->GetOutputPort()); yImageAbs->Update(); vtkSmartPointer yShiftScale = vtkSmartPointer::New(); yShiftScale->SetOutputScalarTypeToUnsignedChar(); yShiftScale->SetScale( 255 / yRange[1] ); yShiftScale->SetInputConnection(yImageAbs->GetOutputPort()); yShiftScale->Update(); vtkSmartPointer originalActor = vtkSmartPointer::New(); originalActor->SetInput(reader->GetOutput()); vtkSmartPointer xActor = vtkSmartPointer::New(); xActor->SetInput(xShiftScale->GetOutput()); vtkSmartPointer yActor = vtkSmartPointer::New(); yActor->SetInput(yShiftScale->GetOutput()); double originalViewport[4] = {0.0, 0.0, 0.33, 1.0}; double xViewport[4] = {0.33, 0.0, 0.66, 1.0}; double yViewport[4] = {0.66, 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 xRenderer = vtkSmartPointer::New(); xRenderer->SetViewport(xViewport); xRenderer->AddActor(xActor); xRenderer->ResetCamera(); xRenderer->SetBackground(1.0, 1.0, 1.0); vtkSmartPointer yRenderer = vtkSmartPointer::New(); yRenderer->SetViewport(yViewport); yRenderer->AddActor(yActor); yRenderer->ResetCamera(); yRenderer->SetBackground(1.0, 1.0, 1.0); vtkSmartPointer renderWindow = vtkSmartPointer::New(); renderWindow->SetSize(1200, 300); renderWindow->AddRenderer(originalRenderer); renderWindow->AddRenderer(xRenderer); renderWindow->AddRenderer(yRenderer); renderWindow->Render(); renderWindow->SetWindowName("SobelExample"); vtkSmartPointer renderWindowInteractor = vtkSmartPointer::New(); vtkSmartPointer style = vtkSmartPointer::New(); renderWindowInteractor->SetInteractorStyle(style); renderWindowInteractor->SetRenderWindow(renderWindow); renderWindowInteractor->Initialize(); renderWindowInteractor->Start(); return EXIT_SUCCESS; }