You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

cv2.resize处理16位灰度图时深度变为24位,如何保持深度缩放?

16位灰度图缩放时保持图像深度的解决方法

问题出在图像读取环节:你当前用cv2.imread默认方式读取16位灰度图时,OpenCV会自动将其转换为3通道8位(24位)图像,后续resize操作自然也会输出24位图像。要保持16位深度,关键是要让OpenCV以原始格式读取图像,再执行缩放。

具体解决步骤:

  • 读取图像时,指定读取参数以保留原始深度和通道数:
    • 使用cv2.IMREAD_UNCHANGED:直接读取图像的原始数据,完整保留深度和通道信息
    • 或者组合cv2.IMREAD_ANYDEPTH | cv2.IMREAD_GRAYSCALE:强制按灰度图读取,同时保留原始位深度
  • 执行cv2.resize时,无需额外参数,只要输入是16位单通道图,输出就会保持相同的深度和数据类型

修正后的代码示例:

# 以原始格式读取16位灰度图
img = cv2.imread("16bitgray.tiff", cv2.IMREAD_UNCHANGED)

# 可选:验证原始图像的类型和通道数
print(f"原始图像 dtype: {img.dtype}, 通道数: {img.shape[-1] if len(img.shape)==3 else 1}")

# 执行缩放操作,保持16位深度
img512 = cv2.resize(img, (512,512), interpolation=cv2.INTER_NEAREST)

# 可选:验证缩放后图像的深度
print(f"缩放后图像 dtype: {img512.dtype}")

补充说明:

  • 如果你明确知道目标是单通道16位灰度图,用cv2.IMREAD_ANYDEPTH | cv2.IMREAD_GRAYSCALE更稳妥,能避免误读为多通道图像
  • OpenCV支持的常见插值方法(如INTER_NEAREST、INTER_LINEAR等)都兼容16位图像处理,不会改变数据类型

内容的提问来源于stack exchange,提问作者eLigt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 05:35:12