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

如何用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的功能实现格式转换,步骤如下:

  1. 安装依赖
pip install pyimagej

首次运行会自动下载ImageJ核心包,需确保网络通畅。

  1. 编写转换代码
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')
  1. 批量转换扩展
    如果需要处理大量文件,可结合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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 18:01:07