如何在PySide2中显示整体图像(.svs)

2024-05-16 03:09:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我想使用pyside2开发一个病理图像识别工具,但我不知道如何显示整个幻灯片图像(后缀为.svs),就像ASAP软件的功能可以快速打开和显示图像一样


Tags: 工具图像功能软件后缀图像识别幻灯片病理
1条回答
网友
1楼 · 发布于 2024-05-16 03:09:37

您可以使用OpenSlide read_region()方法返回一个PIL.Image,该PIL.Image可以使用PIL.ImageQt模块转换为QImage

import sys
from functools import cached_property

from PySide2.QtGui import QImage, QPixmap, QGuiApplication
from PySide2.QtWidgets import QApplication, QComboBox, QLabel, QVBoxLayout, QWidget
import openslide
from PIL.ImageQt import ImageQt


class OpenSlideViewer(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)

        self._slide = None

        lay = QVBoxLayout(self)
        lay.addWidget(self.combo_level)
        lay.addWidget(self.label_slide)

        self.combo_level.currentIndexChanged.connect(self.handle_current_index_changed)

    @property
    def slide(self):
        return self._slide

    @cached_property
    def combo_level(self):
        return QComboBox()

    @cached_property
    def label_slide(self):
        return QLabel(scaledContents=True)

    def load(self, filename):
        self._slide = openslide.OpenSlide(filename)
        self.combo_level.clear()
        for level in range(self.slide.level_count):
            self.combo_level.addItem(f"level-{level}", level)
        self.combo_level.setCurrentIndex(0)

    def change_level(self, level):
        image = self.slide.read_region(
            (0, 0), level, self.slide.level_dimensions[level]
        )
        qimage = ImageQt(image)
        pixmap = QPixmap.fromImage(qimage)
        self.label_slide.setPixmap(pixmap)

    def handle_current_index_changed(self):
        level = self.combo_level.currentData()
        self.change_level(level)


def main(args):
    app = QApplication(args)

    viewer = OpenSlideViewer()
    filename = "/path/of/filename.svs"
    viewer.load(filename)
    viewer.resize(640, 480)
    viewer.show()

    ret = app.exec_()

    sys.exit(ret)


if __name__ == "__main__":
    main(sys.argv)

相关问题 更多 >