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

如何用Python打开多页TIFF文件并保存为数组?解决读取不全问题

解决方案:读取多页TIF文件并存储为数组/列表

方法一:使用OpenCV(cv2)

cv2.imread仅支持读取单页图像,要读取多页TIF需使用cv2.imreadmulti函数,它能一次性读取所有页面并存储为列表或数组:

import cv2
import numpy as np

# 读取多页TIF,保留原始图像格式
ret, pages = cv2.imreadmulti('sen_15Hz_500Hz_6_6A.tif', flags=cv2.IMREAD_UNCHANGED)

if ret:
    print(f"读取到{len(pages)}页图像")
    # 若所有页面尺寸一致,可转换为三维numpy数组
    tif_array = np.array(pages)
    print(f"数组形状:{tif_array.shape}")  # 格式为 (页数, 高度, 宽度[, 通道数])
else:
    print("文件读取失败")

方法二:使用PIL/Pillow

通过Pillow打开多页TIF后,循环调用seek()切换页面,将每页图像转为numpy数组存入列表:

from PIL import Image
import numpy as np

tif = Image.open('sen_15Hz_500Hz_6_6A.tif')
pages = []

try:
    while True:
        # 将当前页转为numpy数组并添加到列表
        pages.append(np.array(tif))
        # 跳转到下一页
        tif.seek(tif.tell() + 1)
except EOFError:
    # 无更多页面时触发EOFError,结束循环
    pass

print(f"读取到{len(pages)}页图像")
# 尺寸一致时可转为三维数组
tif_array = np.array(pages)
print(f"数组形状:{tif_array.shape}")

方法三:使用tifffile库(专业TIF处理推荐)

tifffile库对多页、大尺寸TIF支持更友好,需先安装:pip install tifffile

import tifffile

# 直接读取所有页面为numpy数组
tif_array = tifffile.imread('sen_15Hz_500Hz_6_6A.tif')
print(f"读取到{tif_array.shape[0]}页图像")
print(f"数组形状:{tif_array.shape}")

# 如需列表格式,直接转换即可
pages_list = list(tif_array)

注意事项

  • 若所有页面尺寸、通道数不一致,转换为三维numpy数组会失败,建议保留列表格式存储。
  • 你之前用cv2.imread得到的3维数组,大概率是把单页彩色图像的RGB通道当成了多页,多页TIF的正确维度应为(页数, 高度, 宽度)或(页数, 高度, 宽度, 通道数)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 06:35:45