skimage.io报错TiffPage 0: <COMPRESSION.LZW: 5> requires the ‘imagecodecs‘ package

这篇博客讲述了在处理大尺寸病理图像时遇到的读取问题,特别是在处理tissue_mask或tumor_mask的tif文件时。作者推荐使用`skimage.io.imread()`来读取tif文件,并提供了错误解决方案,建议安装`imagecodecs-lite`包来解决相关问题。

1.解决办法

终端安装

pip install imagecodecs-lite

2.问题描述

病理图像的tissue_mask或者tumor_mask有时候会以图片形式给出,因为图像的尺寸很大,有些图像读取方式不work。我平时喜欢用skimage.io.imread(“tissue_mask.tif”) 读取tissue_mask或者tumor_mask的tif文件。总之按照错误提示安装包就好啦。

### 解决 `ValueError: COMPRESSION.JPEG` 错误并使用 `imageio` 和 `imagecodecs` 处理大尺寸 TIFF 图片 在处理大尺寸 TIFF 图片时,如果遇到 `ValueError: COMPRESSION.JPEG` 或类似错误,通常是因为所使用的库(如 `imageio`)依赖于特定的压缩算法支持。例如,LZW 或 JPEG 压缩需要额外安装 `imagecodecs` 包[^1]。 #### 安装必要的依赖包 确保安装了以下依赖包以支持 TIFF 文件的读取和写入: ```bash conda install -c conda-forge imagecodecs ``` 或者使用 `pip` 安装: ```bash pip install imagecodecs ``` 此外,`imagecodecs-lite` 是 `imagecodecs` 的一个简化版本,也可以尝试安装,但功能可能有限[^3]。 #### 代码实现:大尺寸 TIFF 图片的切割与拼接 以下代码展示了如何使用 `imageio` 和 `imagecodecs` 来处理大尺寸 TIFF 图片,并解决相关错误。 ##### 1. 切割大尺寸 TIFF 图片 ```python import imageio.v2 as imageio import os import numpy as np def split_tif_image(image_path, output_dir, tile_size): # 读取 TIFF 图片 img = imageio.imread(image_path) height, width = img.shape[:2] tiles = [] # 创建输出目录 os.makedirs(output_dir, exist_ok=True) # 按指定大小切割图片 for y in range(0, height, tile_size): for x in range(0, width, tile_size): tile = img[y:y + tile_size, x:x + tile_size] tiles.append((x, y, tile)) # 保存切割后的图片 tile_name = f"tile_x{x}_y{y}.tif" tile_path = os.path.join(output_dir, tile_name) imageio.imwrite(tile_path, tile) return tiles ``` ##### 2. 拼接切割后的图片 ```python def stitch_images(tiles, output_path, original_shape): stitched_image = np.zeros(original_shape, dtype=np.uint8) for x, y, tile in tiles: h, w = tile.shape[:2] stitched_image[y:y + h, x:x + w] = tile # 保存拼接后的图片 imageio.imwrite(output_path, stitched_image) ``` ##### 3. 主程序 ```python if __name__ == "__main__": input_image_path = "large_image.tif" # 输入的大尺寸 TIFF 图片路径 temp_split_dir = "temp_split" # 切割后的图片存放目录 output_image_path = "stitched_image.tif" # 最终拼接的图片路径 tile_size = 256 # 切割块大小 # 分割大尺寸 TIFF 图片 tiles = split_tif_image(input_image_path, temp_split_dir, tile_size) # 获取原始图片的形状 original_img = imageio.imread(input_image_path) original_shape = original_img.shape # 按坐标重新拼接图片 stitch_images(tiles, output_image_path, original_shape) ``` #### 错误处理与注意事项 - 如果仍然遇到 `ValueError`,请确保安装了最新版本的 `imageio` 和 `imagecodecs`[^4]。 - 对于非常大的 TIFF 文件,可以考虑使用分块加载技术以减少内存占用。 - 在某些情况下,TIFF 文件可能包含不常见的压缩格式,这可能导致兼容性问题。此时,可以尝试将文件转换为无压缩格式后再进行处理[^1]。 #### 示例输出 假设输入图片大小为 48047x46022,切割大小为 256x256,则会生成多个小图片文件(如 `tile_x0_y0.tif`、`tile_x256_y0.tif` 等),并在处理后重新拼接为完整的图片。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值