Python interface to OpenSlide for reading whole-slide images used in digital pathology
npx @tessl/cli install tessl/pypi-openslide-python@1.4.0A Python interface to the OpenSlide library for reading whole-slide images (virtual slides) used in digital pathology. OpenSlide Python provides both high-level convenience APIs and low-level bindings for efficient access to large-scale microscopy images without loading entire multi-gigabyte files into memory.
pip install openslide-pythonpip install openslide-bin or system package manager)import openslideCommon imports for typical usage:
from openslide import OpenSlide, ImageSlide, open_slide
from openslide import OpenSlideError, OpenSlideCacheVersion information:
import openslide
print(f"Package version: {openslide.__version__}")
print(f"Library version: {openslide.__library_version__}")import openslide
from openslide import OpenSlide, open_slide
# Open a whole-slide image
with open_slide("path/to/slide.svs") as slide:
# Get basic slide information
print(f"Dimensions: {slide.dimensions}")
print(f"Levels: {slide.level_count}")
print(f"Level dimensions: {slide.level_dimensions}")
print(f"Vendor: {slide.properties.get('openslide.vendor', 'Unknown')}")
# Read a region from the slide
# Location in level 0 coordinates, level to read from, size of region
region = slide.read_region((1000, 1000), 0, (512, 512))
region.save("region.png")
# Generate a thumbnail
thumbnail = slide.get_thumbnail((300, 300))
thumbnail.save("thumbnail.png")
# Access associated images (like label, macro, etc.)
for name, image in slide.associated_images.items():
print(f"Associated image: {name}, size: {image.size}")
image.save(f"{name}.png")OpenSlide Python provides a layered architecture:
openslide module): User-friendly classes with automatic memory management, context manager support, and PIL Image integrationopenslide.lowlevel module): Direct bindings to OpenSlide C library functions for maximum performanceopenslide.deepzoom module): Tile generation for web-based viewers and zoomable interfacesThe library handles the complexities of multi-resolution whole-slide images, including format-specific optimizations, efficient region reading, and proper resource management for the underlying C library.
Core functionality for opening, reading, and manipulating whole-slide images. Includes automatic format detection, multi-level image access, region reading, thumbnail generation, and metadata extraction.
def open_slide(filename: str | bytes | os.PathLike[Any]) -> OpenSlide | ImageSlide: ...
class OpenSlide:
def __init__(self, filename: str | bytes | os.PathLike[Any]): ...
def read_region(self, location: tuple[int, int], level: int, size: tuple[int, int]) -> Image.Image: ...
def get_thumbnail(self, size: tuple[int, int]) -> Image.Image: ...
def get_best_level_for_downsample(self, downsample: float) -> int: ...
def close(self) -> None: ...
@property
def dimensions(self) -> tuple[int, int]: ...
@property
def level_count(self) -> int: ...
@property
def level_dimensions(self) -> tuple[tuple[int, int], ...]: ...
@property
def level_downsamples(self) -> tuple[float, ...]: ...
@property
def properties(self) -> Mapping[str, str]: ...
@property
def associated_images(self) -> Mapping[str, Image.Image]: ...
class ImageSlide:
def __init__(self, file: str | bytes | os.PathLike[Any] | Image.Image): ...Direct bindings to OpenSlide C library functions for maximum performance and fine-grained control. Provides access to all OpenSlide C API functionality including error handling, caching, and ICC color profile support.
import openslide.lowlevel as lowlevel
def open(filename: str | bytes | os.PathLike[Any]) -> lowlevel._OpenSlide: ...
def close(slide: lowlevel._OpenSlide) -> None: ...
def read_region(slide: lowlevel._OpenSlide, x: int, y: int, level: int, w: int, h: int) -> Image.Image: ...
def get_property_names(slide: lowlevel._OpenSlide) -> list[str]: ...
def get_property_value(slide: lowlevel._OpenSlide, name: str | bytes) -> str: ...
def detect_vendor(filename: str | bytes | os.PathLike[Any]) -> str: ...
def get_version() -> str: ...Generate Deep Zoom tiles and metadata for web-based slide viewing with smooth zooming and panning. Supports tile-based rendering, custom tile sizes, overlap settings, and bounds limiting for efficient web visualization.
from openslide.deepzoom import DeepZoomGenerator
class DeepZoomGenerator:
def __init__(self, osr: openslide.AbstractSlide, tile_size: int = 254, overlap: int = 1, limit_bounds: bool = False): ...
def get_tile(self, level: int, address: tuple[int, int]) -> Image.Image: ...
def get_dzi(self, format: str) -> str: ...
@property
def level_count(self) -> int: ...
@property
def level_tiles(self) -> tuple[tuple[int, int], ...]: ...
@property
def level_dimensions(self) -> tuple[tuple[int, int], ...]: ...
@property
def tile_count(self) -> int: ...class OpenSlideError(Exception):
"""Base exception for OpenSlide errors"""
class OpenSlideVersionError(OpenSlideError):
"""OpenSlide version does not support requested functionality"""
class OpenSlideUnsupportedFormatError(OpenSlideError):
"""OpenSlide does not support the requested file format"""# Slide metadata property constants
PROPERTY_NAME_COMMENT = 'openslide.comment'
PROPERTY_NAME_VENDOR = 'openslide.vendor'
PROPERTY_NAME_QUICKHASH1 = 'openslide.quickhash-1'
PROPERTY_NAME_BACKGROUND_COLOR = 'openslide.background-color'
PROPERTY_NAME_OBJECTIVE_POWER = 'openslide.objective-power'
PROPERTY_NAME_MPP_X = 'openslide.mpp-x'
PROPERTY_NAME_MPP_Y = 'openslide.mpp-y'
PROPERTY_NAME_BOUNDS_X = 'openslide.bounds-x'
PROPERTY_NAME_BOUNDS_Y = 'openslide.bounds-y'
PROPERTY_NAME_BOUNDS_WIDTH = 'openslide.bounds-width'
PROPERTY_NAME_BOUNDS_HEIGHT = 'openslide.bounds-height'# Package version information
__version__: str # OpenSlide Python package version ('1.4.2')
__library_version__: str # OpenSlide C library version stringclass OpenSlideCache:
"""In-memory tile cache for improved performance"""
def __init__(self, capacity: int): ...