一般都是按照下面的程序进行的:
vtkSmartPointer<vtkBMPReader> reader = vtkSmartPointer<vtkBMPReader>::New();
reader->SetFileName("test.bmp");
reader->Update();
int dims[3];
reader->GetOutput()->GetDimensions(dims);
std::cout<< "图像维数:"<<dims[0] <<" "<< dims[1] <<" "<<dims[2]<< std::endl;
double origin[3];
reader->GetOutput()->GetOrigin(origin);
std::cout<<"图像原点:"<<origin[0]<<" "<<origin[1]<<" "<<origin[2]<< std::endl;
double spaceing[3];
reader->GetOutput()->GetSpacing(spaceing);
int nbofcomp;
nbofcomp = reader->GetOutput()->GetNumberOfScalarComponents();
for (int k = 0; k < dims[2];k++)
{
for (int j = 0; j < dims[1]; j++)
{
for (int i = 0; i < dims[0]; i++)
{
unsigned char *pixel=(unsigned char*)(reader->GetOutput()- >GetScalarPointer (i,j,k));
//输出每个点的值,需转化为int 型
std::cout << int(*pixel) <<std::endl;
//赋值语句
*pixel = 135;
}
}
}
有个问题,我用的 vtkMetaImageReader 读进去.mhd文件的数据,用上面的方法读出来的所有的点的体素值都是0;
这个mhd正确数据是0和1,3D二值图数据,但是体素值都是0,不知道为什么?无奈我最后用ITK把文件读进来,把所有为1的体素点提取出来,生成点云,再曲面重建,后续处理。
有哪个同仁知道这是怎么回事?