import openslide
from openslide.deepzoom import DeepZoomGenerator # 导入DeepZoomGennerator,主要是多层金字塔形式封装
import numpy as np
import matplotlib.pyplot as plt
import io
slide = openslide.open_slide(r'H:\0\svs\0_0.svs')
[w, h] = slide.dimensions# 默认得出最高倍下的(宽,高)
print(w, h) # 28043 28615
print(slide.level_dimensions)# ((28043, 28615), (7010, 7153), (1752, 1788), (438, 447), (109, 111), (27, 27))
print(slide.level_dimensions[1])# (7010, 7153)
# downsamples,网上都成为下采样因子,可能不好理解,它代表的将原始WSI图像进行缩放的倍数,与level_dimentions是相对应的
print(slide.level_downsamples) #(1.0, 4.000423682251375, 16.005096763813555, 64.02038705525422, 257.53401107529544, 1049.2222222222222)
print(slide.level_count) #层数
# read_region(location, level, size)
# 返回一个包含特定区域的RGBA图像的rgba数值数组
# 参数:
# location (元组) 左上角坐标
# level (int) 层数
# size (元组) 大小(宽, 高)
print(slide.read_region((0, 0), 3, (438, 447)))
img=slide.read_region((0, 0), 3, (438, 447))
img_arr=np.array(img)
plt.imshow(img_arr)
print(img_arr)
print(img_arr.size)# 783144 (447*438*4
print(img_arr.shape) # (447, 438, 4)
slide_best_downsamples=slide.get_best_level_for_downsample(4.0)
print (slide_best_downsamples)
# 返回一个缩略图的RGB图像,size为(width,height)元组
slide_thumbnail = slide.get_thumbnail((7010,7153))
tile = np.array(slide_thumbnail)
plt.imshow(slide_thumbnail)
plt.imshow(tile)
data_gen = DeepZoomGenerator(slide, tile_size=highth, overlap=0, limit_bounds=False)
# tile_size可以设成自己想切的图像大小。
# limit_bounds表示的是大图整个边缘可能达不到自己设的长和宽。False,则丢弃边缘图。True,保存
# overlap表示的是否边缘overlap,引入其他信息
# 输出总共切图个数 和 一共有多少个金字塔
print('总切图的个数:', data_gen.tile_count) # 切块的块数
print('层数:', data_gen.level_count) # 一共有多少个金字塔
print('每层尺寸大小:', data_gen.level_dimensions) # 每层尺寸大小
img = data_gen.get_tile(3, (0, 0)) #切图
plt.imshow(img)
plt.show()
openslide简单入门代码
最新推荐文章于 2024-03-14 17:42:53 发布