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

本文介绍了一个使用ITK和VTK库来读取图像文件并统计其中大于特定阈值的像素数量的方法。通过迭代每个像素并根据其灰度值进行计数,实现了对图像中亮度较高区域的统计分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

统计像素点数

#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;
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值