PIL读取dengue文件夹TIFF图片报UnidentifiedImageError 求生成1D数组方案
报错原因及解决方案
UnidentifiedImageError 报错的核心原因是默认安装的Pillow库对部分非标准TIFF格式、特殊压缩编码(如LZW、CCITT)的科研/遥感类TIFF支持不全,导致无法识别文件。以下是可直接落地的解决方法:
方法1:补全Pillow的TIFF依赖(保留原有代码逻辑)
- 先更新Pillow为带libtiff支持的版本:
pip uninstall pillow pip install pillow[libtiff]
- 优化后的读取+转1D数组代码,增加异常兼容:
from PIL import Image import glob import numpy as np image_list = [] one_dim_arr_list = [] for filename in glob.glob('./dengue/*.tiff'): try: with Image.open(filename) as im: image_list.append(im) # 直接转numpy数组后拉平为1D one_dim_arr = np.array(im).flatten() one_dim_arr_list.append(one_dim_arr) except Exception as e: print(f"文件{filename}读取失败:{str(e)}")
方法2:用专业TIFF读取库(兼容性最高,适配所有TIFF格式)
推荐处理科研类TIFF时使用该方案:
- 安装依赖:
pip install pylibtiff numpy
- 读取+转1D数组代码:
from libtiff import TIFF import glob import numpy as np one_dim_arr_list = [] for filename in glob.glob('./dengue/*.tiff'): tif_handle = TIFF.open(filename, mode='r') img_data = tif_handle.read_image() one_dim_arr = img_data.flatten() one_dim_arr_list.append(one_dim_arr) tif_handle.close()
方法3:用OpenCV读取(适配常规影像类TIFF)
- 安装依赖:
pip install opencv-python numpy
- 读取+转1D数组代码:
import cv2 import glob import numpy as np one_dim_arr_list = [] for filename in glob.glob('./dengue/*.tiff'): # IMREAD_UNCHANGED参数保留原始通道、位深,不需要的话可替换为对应读取参数 img_data = cv2.imread(filename, cv2.IMREAD_UNCHANGED) one_dim_arr = img_data.flatten() one_dim_arr_list.append(one_dim_arr)
注意:如果你的TIFF是多帧堆叠格式,上述代码默认仅读取第一帧,需要读取全量帧的话可增加逐帧遍历逻辑后再合并拉平。
内容的提问来源于stack exchange,提问作者user15653028
相关产品推荐
相关产品推荐

