openslide对.svs切成tile,并显示的记录

仅作为记录,大佬请跳过。

文章目录

直接上代码

(有.svs图和相应的python包(openslide、matplotlib)后可直接运行)

import openslide
import matplotlib.pyplot as plt

img_path=r'F:\Breast Metastases\data\images\Breast-Metastases-MSKCC\HobI16-053768896760.svs'

slide=openslide.OpenSlide(img_path);slide2=openslide.OpenSlide(img_path)
print(slide.level_dimensions[0])

from openslide.deepzoom import DeepZoomGenerator

print(slide.detect_format(img_path))        # 图像扫描仪制造商
print(slide.properties)                     # 幻灯片的各种属性
downsamples=slide.level_downsamples         # 下采样因子
[w,h]=slide.level_dimensions[0]             # 图像大小(宽,高)
print(w,h)

# # 得到缩略图
simg=slide.get_thumbnail((1500,1500))       # 206,400
plt.imshow(simg)
plt.show()

# # 实现DeepZoomGenerator的功能
data_gen=DeepZoomGenerator(slide2,tile_size=100,overlap=1,limit_bounds=False)

print('******************************')
print(data_gen.level_count)         # 深度缩放的级别
print(data_gen.tile_count)          # 深度缩放的图块数量
print(data_gen.level_tiles)         # level k's tile counts
print(data_gen.level_dimensions)    # level k's dimensions


# tile=data_gen.get_tile(11,(0,0))
# plt.imshow(tile);plt.show()

tile_img1=data_gen.get_tile(11,(0,0))
tile_img2=data_gen.get_tile(11,(0,1))
plt.subplot(2,1,1)
plt.imshow(tile_img1)
plt.subplot(2,1,2)
plt.imshow(tile_img2)
plt.show()

在这里插入图片描述

参考

感谢大佬博主文章传送门

openslide官网在tile切块处理方面的应用传送门

### OpenSlide Tile 拼接方法及实现 OpenSlide 是一个用于读取虚拟幻灯片图像文件的库,支持多种专有格式。为了进行 tile 的拼接操作,可以利用 Python 中的 `openslide-python` 库来获取各个 tile 将其组合成完整的图像。 #### 获取安装依赖项 确保已经按照官方文档说明完成了 OpenSlide 及其 Python 绑定的安装[^1]: 对于 Windows 用户来说,可以从指定网站下载预编译版本,遵循给定指南完成设置过程。 #### 实现代码示例 下面是一个简单的例子展示如何通过遍历所有 tiles 来创建整张图片: ```python import numpy as np from PIL import Image import openslide def stitch_tiles(svs_file_path, output_image_path): slide = openslide.OpenSlide(svs_file_path) # 获取整个slide的信息 dimensions = slide.dimensions # 创建一个新的空白图像作为最终结果的基础 stitched_img = Image.new('RGB', (dimensions[0], dimensions[1])) level_dimensions = slide.level_dimensions[0] for y in range(0, level_dimensions[1]): for x in range(0, level_dimensions[0]): region_size = (256, 256) # 假设每个tile大小为256*256像素 try: img_tile = slide.read_region((x * 256, y * 256), 0, region_size).convert('RGB') box = (x * 256, y * 256, (x + 1) * 256, (y + 1) * 256) stitched_img.paste(img_tile, box=box) except Exception as e: print(f"Error reading tile at ({x},{y}): {e}") stitched_img.save(output_image_path) if __name__ == "__main__": svs_file_path = "path_to_your_svs_file.svs" output_image_path = "output_stitched_image.png" stitch_tiles(svs_file_path, output_image_path) ``` 这段脚本会逐个读取 SVS 文件中的每一个 tile将它们粘贴到新的大图中相应位置上形成完整的大图[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值