《itk实用demo》-统计图像某个像素值的点数

版权声明:本文为博主原创文章,转载请注明出处,谢谢 https://blog.csdn.net/rabbitbride/article/details/82415260

统计像素点数

#include "itkImage.h"
#include "itkImageFileReader.h"
#include "itkImageRegionIterator.h"

#include <itkImageToVTKImageFilter.h>

#include "vtkVersion.h"
#include "vtkImageViewer.h"
//#include "vtkImageMapper3D.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkSmartPointer.h"
#include "vtkImageActor.h"
#include "vtkInteractorStyleImage.h"
#include "vtkRenderer.h"

int main(int argc, char*argv[])
{
 typedef itk::Image<unsigned char, 2>  ImageType;

 typedef itk::ImageFileReader<ImageType> ReaderType;
 ReaderType::Pointer reader = ReaderType::New();
 reader->SetFileName("D:\\se6\\bmp3\\IM0.bmp");
 reader->Update();

 ImageType::Pointer image = reader->GetOutput();

 ImageType::SizeType regionSize;
 regionSize[0] = reader->GetOutput()->GetLargestPossibleRegion().GetSize()[0];
 regionSize[1] = reader->GetOutput()->GetLargestPossibleRegion().GetSize()[1];

 ImageType::IndexType regionIndex;
 regionIndex[0] = 0;
 regionIndex[1] = 0;

 ImageType::RegionType region;
 region.SetSize(regionSize);
 region.SetIndex(regionIndex);

 itk::ImageRegionIterator<ImageType> imageIterator(image,region);

 int i = 0;
 int j = 0;
 while(!imageIterator.IsAtEnd())
 {
  // Get the value of the current pixel
  unsigned char val = imageIterator.Get();
  //std::cout << (int)val << std::endl;

  // Set the current pixel to white
  //imageIterator.Set(255);

  ++imageIterator;
  //-----------------------------------
  if ((int)val>150)
  {
   i++;
   imageIterator.Set(0);
  }
  if ((int)val>100)
  {
   j++;
  }
  //std::cout << imageIterator << std::endl;
 }
 std::cout << i << std::endl;
 std::cout << j-i << std::endl;
 // Visualize
 typedef itk::ImageToVTKImageFilter<ImageType> ConnectorType;
 ConnectorType::Pointer connector = ConnectorType::New();
 connector->SetInput(image);

 vtkSmartPointer<vtkImageActor> actor =
  vtkSmartPointer<vtkImageActor>::New();
 actor->SetInput(connector->GetOutput());

 vtkSmartPointer<vtkRenderWindow> renderWindow =
  vtkSmartPointer<vtkRenderWindow>::New();

 vtkSmartPointer<vtkRenderWindowInteractor> interactor =
  vtkSmartPointer<vtkRenderWindowInteractor>::New();
 interactor->SetRenderWindow(renderWindow);

 vtkSmartPointer<vtkRenderer> renderer =
  vtkSmartPointer<vtkRenderer>::New();
 renderWindow->AddRenderer(renderer);

 renderer->AddActor(actor);
 renderer->ResetCamera();

 renderWindow->Render();

 vtkSmartPointer<vtkInteractorStyleImage> style =
  vtkSmartPointer<vtkInteractorStyleImage>::New();

 interactor->SetInteractorStyle(style);

 interactor->Start();

 return EXIT_SUCCESS;
}
}

猜你喜欢

转载自blog.csdn.net/rabbitbride/article/details/82415260