如何将scipy读取的uint16类型二维ndarray转换为int16?
将uint16类型ndarray转换为int16的快速方法
根据你的需求,有两种常见的快速转换方式,取决于你对数值范围的处理需求:
1. 直接类型转换(忽略溢出)
如果你的图像数据本身的数值范围在 0-32767 内(未超出int16的正数上限),可以直接用numpy的astype()方法强制转换类型:
import numpy as np # 假设image是读取到的uint16类型ndarray image_int16 = image.astype(np.int16)
注意:如果原数据中有大于32767的数值(比如32768),转换后会因为二进制补码规则变成负数(32768转成-32768,65535转成-1),这是无符号转有符号的默认溢出行为。
2. 数值映射(适配int16全范围)
如果需要将uint16的完整数值范围(0-65535)映射到int16的有效范围(-32768到32767),可以先做数值偏移再转换:
import numpy as np # 先减去32768,再转类型 image_int16 = (image - 32768).astype(np.int16)
这种方式会把原图像的0映射为-32768,65535映射为32767,完整保留原数据的动态范围,适合需要后续处理全范围数据的场景。
两种方法都是numpy原生的矢量操作,处理速度极快,完全适配二维TIFF图像的规模。
内容的提问来源于stack exchange,提问作者vashista
相关产品推荐
相关产品推荐

