#include <vtkActor.h>
#include <vtkLookupTable.h>
#include <vtkPolyDataMapper.h>
#include <vtkProperty.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkSmartPointer.h>
#include <vtkImageToPolyDataFilter.h>
#include <vtkImageQuantizeRGBToIndex.h>
#include <vtkCamera.h>
#include <vtkPNGReader.h>
#include <vtkTriangleFilter.h>
int main(int argc, char *argv[])
{
QString path = "D:/tmp1/4698AF6023D53AE4A616FEA9BDF581A54882A443/mask/1/肺/SHENG_0086.png";
vtkNew<vtkPNGReader> reader;
reader->SetFileName(path.toLocal8Bit().data());
reader->Update();
//1.
vtkNew<vtkContourFilter> contourFilter;
contourFilter->SetInputData( reader->GetOutput() );
contourFilter->SetValue(0,135);
vtkNew<vtkPolyDataMapper> contourMapper;
contourMapper->SetInputConnection( contourFilter->GetOutputPort() );
contourMapper->ScalarVisibilityOff();
//1.end
//2.
vtkNew<vtkOutlineFilter> outlineFilter;
outlineFilter->SetInputConnection(reader->GetOutputPort());
vtkNew<vtkPolyDataMapper> outlineMapper;
outlineMapper->SetInputConnection( outlineFilter->GetOutputPort() );
//2.end
//3.
vtkNew<vtkImageQuantizeRGBToIndex> quant;
quant->SetInputConnection(reader->GetOutputPort());
quant->SetNumberOfColors(32);
vtkNew<vtkImageToPolyDataFilter> i2pd;
i2pd->SetInputConnection(reader->GetOutputPort());
// i2pd->SetInputConnection(quant->GetOutputPort());
i2pd->SetLookupTable(quant->GetLookupTable());
i2pd->SetColorModeToLUT();
i2pd->SetOutputStyleToPolygonalize();
i2pd->SetError(0);
i2pd->DecimationOn();
i2pd->SetDecimationError(0.0);
i2pd->SetSubImageSize(25);
// Need a triangle filter because the polygons are complex and concave
vtkNew<vtkTriangleFilter> tf;
tf->SetInputConnection(i2pd->GetOutputPort());
vtkNew<vtkPolyDataMapper> mapper;
mapper->SetInputConnection(tf->GetOutputPort());
//3.end
vtkNew<vtkActor> actor;
actor->SetMapper(contourMapper);
// actor->SetMapper(contourMapper);
// actor->SetMapper(mapper);
// actor->GetProperty()->SetRepresentationToWireframe();
actor->GetProperty()->SetColor(1,0,0);
actor->GetProperty()->SetLineWidth(2);
// Visualize
vtkNew<vtkRenderer> renderer;
vtkNew<vtkRenderWindow> renderWindow;
renderWindow->AddRenderer(renderer);
vtkNew<vtkRenderWindowInteractor> interactor;
interactor->SetRenderWindow(renderWindow);
renderer->AddActor(actor);
renderWindow->SetSize(512, 512);
renderWindow->Render();
interactor->Initialize();
interactor->Start();
return EXIT_SUCCESS;
}