我正在尝试使用numpy从卷中提取切片。 卷是512x512x132,我想要切片号66。 每个体素都是无符号的16位整数。
我的代码是:
import numpy
original = numpy.fromfile(filepath, dtype=numpy.uint16)
original = numpy.reshape(original, (512,512,132))
slice = original[:,:,66]
f = open('test.rawl', 'w')
slice.tofile(f)
f.close()
代码干净利落,但是当我用外部程序打开切片时,它不是切片数据而是垃圾。
我做错了什么?
由于
答案 0 :(得分:1)
你的第一个问题是你的轴错了。假设您要使用132层512x512图像:
original = numpy.fromfile(filepath, dtype=numpy.uint16).reshape((132, 512, 512))
然后换片:
slc = original[66]
此外,Numpy数组等二进制数据使用:
f = open('test.raw', 'wb')
模式中的'b'用于二进制。否则,Python会假设您正在尝试编写文本并执行诸如将换行符转换为系统的适当格式等操作。
顺便说一句,ndarray.tofile()
方法也采用文件名,因此除非你有特殊的理由,否则不必先创建文件句柄。你可以使用
arr.tofile('test.raw')
最后一点:尽量不要将slice
用作变量。这是Python中的一个内置名称,你可能会因为用别的东西遮住它而遇到麻烦。