为什么Python ITK的PyBuffer不接受我的numpy数组?
我正在使用Python 2.6和ITK的封装(来自PythonXY 2.6.6.2)。我想把一个3D图像从numpy/scipy发送到itk进行处理。
import itk
imageType = itk.Image.F3
buf = scipy.zeros( (100,100,100), dtype = float)
itkImage = itk.PyBuffer[imageType].GetImageFromArray(buf)
使用GetImageFromArray()时出现了以下错误:
RuntimeError: Contiguous array couldn't be created from input python object
但是,如果我不自己创建缓冲区,而是让ITK自己创建图像,GetImageFromArray()就突然可以用了:
import itk
imageType = itk.Image.F3
itkImage1 = imageType.New(Regions=[256, 256, 256])
buf = itk.PyBuffer[imageType].GetArrayFromImage(itkImage1)
itkImage2 = itk.PyBuffer[imageType].GetImageFromArray(buf)
我该如何自己创建一个numpy数组,使GetImageFromArray()能够接受呢?
1 个回答
6
这个答案很简单:
- 在Python中,“float”通常是64位的(在C语言中叫做double)。
- 而在itk中,F3是32位的浮点数。
指定正确的ndarray类型就能让它正常工作:
import itk
imageType = itk.Image.F3
buf = scipy.zeros( (100,100,100), dtype = numpy.float32)
itkImage = itk.PyBuffer[imageType].GetImageFromArray(buf)