From cebdc9244c019224846cb8d2668080fe386a6adc Mon Sep 17 00:00:00 2001 From: Alexandre Marie Date: Mon, 17 Dec 2018 12:28:24 +0100 Subject: New upstream version 0.9.0+dfsg --- examples/compareImages.py | 149 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 149 insertions(+) create mode 100644 examples/compareImages.py (limited to 'examples/compareImages.py') diff --git a/examples/compareImages.py b/examples/compareImages.py new file mode 100644 index 0000000..94f68a0 --- /dev/null +++ b/examples/compareImages.py @@ -0,0 +1,149 @@ +#!/usr/bin/env python +# coding: utf-8 +# /*########################################################################## +# +# Copyright (c) 2016-2017 European Synchrotron Radiation Facility +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +# ###########################################################################*/ +"""Example demonstrating the use of the widget CompareImages +""" + +import sys +import logging +import numpy +import argparse + +import silx.io +from silx.gui import qt +import silx.test.utils +from silx.gui.plot.CompareImages import CompareImages + +_logger = logging.getLogger(__name__) + +try: + import fabio +except ImportError: + _logger.debug("Backtrace", exc_info=True) + fabio = None + +try: + import PIL +except ImportError: + _logger.debug("Backtrace", exc_info=True) + PIL = None + + +def createTestData(): + data = numpy.arange(100 * 100) + data = (data % 100) / 5.0 + data = numpy.sin(data) + data1 = data.copy() + data1.shape = 100, 100 + data2 = silx.test.utils.add_gaussian_noise(data, stdev=0.1) + data2.shape = 100, 100 + return data1, data2 + + +def loadImage(filename): + try: + return silx.io.get_data(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) + + if PIL is not None: + try: + return numpy.asarray(PIL.Image.open(filename)) + except Exception: + _logger.debug("Error while loading image with PIL", exc_info=True) + + raise Exception("Impossible to load '%s' with the available image libraries" % filename) + + +file_description = """ +Image data to compare (HDF5 file with path, EDF files, JPEG/PNG image files). +Data from HDF5 files can be accessed using dataset path and slicing as an URL: silx:../my_file.h5?path=/entry/data&slice=10 +EDF file frames also can can be accessed using URL: fabio:../my_file.edf?slice=10 +Using URL in command like usually have to be quoted: "URL". +""" + + +def createParser(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument( + 'files', + nargs=argparse.ZERO_OR_MORE, + help=file_description) + parser.add_argument( + '--debug', + dest="debug", + action="store_true", + default=False, + help='Set logging system in debug mode') + parser.add_argument( + '--testdata', + dest="testdata", + action="store_true", + default=False, + help='Use synthetic images to test the application') + parser.add_argument( + '--use-opengl-plot', + dest="use_opengl_plot", + action="store_true", + default=False, + help='Use OpenGL for plots (instead of matplotlib)') + return parser + + +if __name__ == "__main__": + parser = createParser() + options = parser.parse_args(sys.argv[1:]) + + 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) + window.setVisible(True) + app.exec_() -- cgit v1.2.3