如何用Python将Bio-Rad Image Lab生成的*.scn文件转为*.tiff
问题描述
我用Bio-Rad Image Lab软件扫描生化反应玻片,批量保存的图像格式为*.scn。现在需要用Python将这些*.scn文件转换为*.tiff格式,但尝试了slideio、tifffile、opencv等Python库均无法打开文件:
- 使用tifffile时的代码及报错:
import tifffile path = 'img.scn' img = tifffile.imread(path)
错误信息:
Exception has occurred: TiffFileError not a TIFF file b'MIME' KeyError: b'MI' During handling of the above exception, another exception occurred: File "/mnt/c/analysis/dev_analysis/2022_12_12_scn_extract/scn2tiff.py", line 9, in <module> img = tifffile.imread(path) tifffile.tifffile.TiffFileError: not a TIFF file b'MIME'
- 使用slideio时的代码及报错:
import slideio path = 'img.scn' slide = slideio.open_slide(path, "SCN")
错误信息:
Exception has occurred: RuntimeError SCNImageDriver: Cannot open file:img.scn File "/mnt/c/analysis/dev_analysis/2022_12_12_scn_extract/scn2tiff.py", line 6, in <module> slide = slideio.open_slide(path, "SCN") RuntimeError: SCNImageDriver: Cannot open file:img.scn
已知ImageJ可以正常打开这类*.scn文件。
解决方案
既然ImageJ支持读取该格式,可通过pyimagej库在Python中调用ImageJ的功能实现格式转换,步骤如下:
- 安装依赖
pip install pyimagej
首次运行会自动下载ImageJ核心包,需确保网络通畅。
- 编写转换代码
import imagej import numpy as np from PIL import Image # 初始化ImageJ实例 ij = imagej.init() def scn_to_tiff(scn_path, tiff_path): # 读取SCN文件 img_java = ij.io().open(scn_path) # 转换为Python可处理的numpy数组 img_np = ij.py.from_java(img_java) # 调整通道顺序(若图像为RGB格式,需将通道维度从首位移至末位) if len(img_np.shape) == 3 and img_np.shape[0] == 3: img_np = np.transpose(img_np, (1, 2, 0)) # 保存为TIFF格式 Image.fromarray(img_np).save(tiff_path) # 示例调用 scn_to_tiff('img.scn', 'output.tiff')
- 批量转换扩展
如果需要处理大量文件,可结合os模块遍历文件夹:
import os input_dir = 'path/to/scn_files' output_dir = 'path/to/tiff_output' os.makedirs(output_dir, exist_ok=True) for filename in os.listdir(input_dir): if filename.endswith('.scn'): scn_path = os.path.join(input_dir, filename) tiff_path = os.path.join(output_dir, filename.replace('.scn', '.tiff')) scn_to_tiff(scn_path, tiff_path)
补充说明
- 若图像为多通道、高分辨率或特殊位深格式,可调用ImageJ的API调整参数,比如用
ij.op().convert().convertType()进行格式适配。 - 也可先在ImageJ中录制转换宏,再通过Python调用宏执行批量处理,适合复杂需求场景。
内容的提问来源于stack exchange,提问作者user17972172
相关产品推荐
相关产品推荐

