diff options
Diffstat (limited to 'examples/compareImages.py')
-rw-r--r-- | examples/compareImages.py | 110 |
1 files changed, 86 insertions, 24 deletions
diff --git a/examples/compareImages.py b/examples/compareImages.py index 94f68a0..623216a 100644 --- a/examples/compareImages.py +++ b/examples/compareImages.py @@ -30,19 +30,18 @@ import sys import logging import numpy import argparse +import os import silx.io from silx.gui import qt import silx.test.utils +from silx.io.url import DataUrl from silx.gui.plot.CompareImages import CompareImages +from silx.gui.widgets.UrlSelectionTable import UrlSelectionTable _logger = logging.getLogger(__name__) -try: - import fabio -except ImportError: - _logger.debug("Backtrace", exc_info=True) - fabio = None +import fabio try: import PIL @@ -51,6 +50,70 @@ except ImportError: PIL = None +class CompareImagesSelection(qt.QMainWindow): + def __init__(self, backend): + qt.QMainWindow.__init__(self, parent=None) + self._plot = CompareImages(parent=self, backend=backend) + + self._selectionTable = UrlSelectionTable(parent=self) + self._dockWidgetMenu = qt.QDockWidget(parent=self) + self._dockWidgetMenu.layout().setContentsMargins(0, 0, 0, 0) + self._dockWidgetMenu.setFeatures(qt.QDockWidget.DockWidgetMovable) + self._dockWidgetMenu.setWidget(self._selectionTable) + self.addDockWidget(qt.Qt.LeftDockWidgetArea, self._dockWidgetMenu) + + self.setCentralWidget(self._plot) + + self._selectionTable.sigImageAChanged.connect(self._updateImageA) + self._selectionTable.sigImageBChanged.connect(self._updateImageB) + + def setUrls(self, urls): + for url in urls: + self._selectionTable.addUrl(url) + + def setFiles(self, files): + urls = list() + for _file in files: + if os.path.isfile(_file): + urls.append(DataUrl(file_path=_file, scheme=None)) + urls.sort(key=lambda url: url.path()) + window.setUrls(urls) + window._selectionTable.setSelection(url_img_a=urls[0].path(), + url_img_b=urls[1].path()) + + def clear(self): + self._plot.clear() + self._selectionTable.clear() + + def _updateImageA(self, urlpath): + self._updateImage(urlpath, self._plot.setImage1) + + def _updateImage(self, urlpath, fctptr): + def getData(): + _url = silx.io.url.DataUrl(path=urlpath) + for scheme in ('silx', 'fabio'): + try: + dataImg = silx.io.utils.get_data( + silx.io.url.DataUrl(file_path=_url.file_path(), + data_slice=_url.data_slice(), + data_path=_url.data_path(), + scheme=scheme)) + except: + _logger.debug("Error while loading image with %s" % scheme, + exc_info=True) + else: + # TODO: check is an image + return dataImg + return None + + data = getData() + if data is not None: + fctptr(data) + + def _updateImageB(self, urlpath): + self._updateImage(urlpath, self._plot.setImage2) + + def createTestData(): data = numpy.arange(100 * 100) data = (data % 100) / 5.0 @@ -68,14 +131,10 @@ def loadImage(filename): except Exception: _logger.debug("Error while loading image with silx.io", exc_info=True) - if fabio is None and PIL is None: - raise ImportError("fabio nor PIL are available") - - if fabio is not None: - try: - return fabio.open(filename).data - except Exception: - _logger.debug("Error while loading image with fabio", exc_info=True) + try: + return fabio.open(filename).data + except Exception: + _logger.debug("Error while loading image with fabio", exc_info=True) if PIL is not None: try: @@ -128,22 +187,25 @@ if __name__ == "__main__": if options.debug: logging.root.setLevel(logging.DEBUG) - if options.testdata: - _logger.info("Generate test data") - data1, data2 = createTestData() - else: - if len(options.files) != 2: - raise Exception("Expected 2 images to compare them") - data1 = loadImage(options.files[0]) - data2 = loadImage(options.files[1]) - if options.use_opengl_plot: backend = "gl" else: backend = "mpl" app = qt.QApplication([]) - window = CompareImages(backend=backend) - window.setData(data1, data2) + if options.testdata or len(options.files) == 2: + if options.testdata: + _logger.info("Generate test data") + data1, data2 = createTestData() + else: + data1 = loadImage(options.files[0]) + data2 = loadImage(options.files[1]) + window = CompareImages(backend=backend) + window.setData(data1, data2) + else: + data = options.files + window = CompareImagesSelection(backend=backend) + window.setFiles(options.files) + window.setVisible(True) app.exec_() |