实例36:图像二值化
#include "vtkAutoInit.h"
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
#include <vtkSmartPointer.h>
#include <vtkImageData.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkInteractorStyleImage.h>
#include <vtkRenderer.h>
#include <vtkImageActor.h>
#include <vtkJPEGReader.h>
#include <vtkImageThreshold.h>
#include <vtkImageCast.h>
//测试图像:../data/lena-gray.jpg
int main(int argc, char* argv[])
{
vtkSmartPointer<vtkJPEGReader> reader =
vtkSmartPointer<vtkJPEGReader>::New();
reader->SetFileName("lena-gray.jpg");
reader->Update();
vtkSmartPointer<vtkImageThreshold> thresholdFilter =
vtkSmartPointer<vtkImageThreshold>::New();
thresholdFilter->SetInputConnection(reader->GetOutputPort());
thresholdFilter->ThresholdByUpper(100);//设置阈值为100
thresholdFilter->SetInValue(255);//大于100的设置为255
thresholdFilter->SetOutValue(0);//小于100的设置为0
thresholdFilter->Update();//算法执行后必须添加更新消息
vtkSmartPointer<vtkImageActor> originalActor =
vtkSmartPointer<vtkImageActor>::New();
originalActor->SetInputData(reader->GetOutput());
vtkSmartPointer<vtkImageActor> binaryActor =
vtkSmartPointer<vtkImageActor>::New();
binaryActor->SetInputData(thresholdFilter->GetOutput());
double originalViewport[4] = {0.0, 0.0, 0.5, 1.0};
double binaryviewport[4] = {0.5, 0.0, 1.0, 1.0};
vtkSmartPointer<vtkRenderer> originalRenderer =
vtkSmartPointer<vtkRenderer>::New();
originalRenderer->SetViewport(originalViewport);
originalRenderer->AddActor(originalActor);
originalRenderer->ResetCamera();
originalRenderer->SetBackground(1.0, 1.0, 1.0);
vtkSmartPointer<vtkRenderer> binaryRenderer =
vtkSmartPointer<vtkRenderer>::New();
binaryRenderer->SetViewport(binaryviewport);
binaryRenderer->AddActor(binaryActor);
binaryRenderer->ResetCamera();
binaryRenderer->SetBackground(1.0, 1.0, 1.0);
vtkSmartPointer<vtkRenderWindow> renderWindow =
vtkSmartPointer<vtkRenderWindow>::New();
renderWindow->AddRenderer(originalRenderer);
renderWindow->AddRenderer(binaryRenderer);
renderWindow->SetSize(640, 320);
renderWindow->Render();
renderWindow->SetWindowName("ImageBinaryExample");
vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =
vtkSmartPointer<vtkRenderWindowInteractor>::New();
vtkSmartPointer<vtkInteractorStyleImage> style =
vtkSmartPointer<vtkInteractorStyleImage>::New();
renderWindowInteractor->SetInteractorStyle(style);
renderWindowInteractor->SetRenderWindow(renderWindow);
renderWindowInteractor->Initialize();
renderWindowInteractor->Start();
return EXIT_SUCCESS;
}