2024-05-16 03:09:37 发布
网友
我想使用pyside2开发一个病理图像识别工具,但我不知道如何显示整个幻灯片图像(后缀为.svs),就像ASAP软件的功能可以快速打开和显示图像一样
您可以使用OpenSlide read_region()方法返回一个PIL.Image,该PIL.Image可以使用PIL.ImageQt模块转换为QImage
read_region()
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)
您可以使用OpenSlide
read_region()
方法返回一个PIL.Image,该PIL.Image可以使用PIL.ImageQt模块转换为QImage相关问题 更多 >
编程相关推荐