mirror of
https://github.com/wassname/scikit-image.git
synced 2026-06-29 09:39:59 +08:00
f47312a3d1
Plugin is now added to the viewer using an inplace add on the viewer instead of on initialization of the plugin. This change means that operations requiring the viewer must be delayed until attach operation.
67 lines
1.9 KiB
Python
67 lines
1.9 KiB
Python
from .base import Plugin
|
|
from ..utils import ClearColormap
|
|
|
|
|
|
class OverlayPlugin(Plugin):
|
|
"""Plugin for ImageViewer that displays an overlay on top of main image.
|
|
|
|
Attributes
|
|
----------
|
|
overlay : array
|
|
Overlay displayed on top of image. This overlay defaults to a color map
|
|
with alpha values varying linearly from 0 to 1.
|
|
"""
|
|
colors = {'red': (1, 0, 0),
|
|
'yellow': (1, 1, 0),
|
|
'green': (0, 1, 0),
|
|
'cyan': (0, 1, 1)}
|
|
|
|
def __init__(self, **kwargs):
|
|
super(OverlayPlugin, self).__init__(**kwargs)
|
|
self._overlay_plot = None
|
|
self._overlay = None
|
|
self.cmap = None
|
|
self.color_names = self.colors.keys()
|
|
|
|
def attach(self, image_viewer):
|
|
super(OverlayPlugin, self).attach(image_viewer)
|
|
#TODO: `color` doesn't update GUI widget when set manually.
|
|
self.color = 0
|
|
|
|
@property
|
|
def overlay(self):
|
|
return self._overlay
|
|
|
|
@overlay.setter
|
|
def overlay(self, image):
|
|
self._overlay = image
|
|
ax = self.image_viewer.ax
|
|
if image is None:
|
|
ax.images.remove(self._overlay_plot)
|
|
self._overlay_plot = None
|
|
elif self._overlay_plot is None:
|
|
self._overlay_plot = ax.imshow(image, cmap=self.cmap)
|
|
else:
|
|
self._overlay_plot.set_array(image)
|
|
self.image_viewer.redraw()
|
|
|
|
def closeEvent(self, event):
|
|
self.overlay = None
|
|
super(OverlayPlugin, self).closeEvent(event)
|
|
|
|
@property
|
|
def color(self):
|
|
return self._color
|
|
|
|
@color.setter
|
|
def color(self, index):
|
|
# Update colormap whenever color is changed.
|
|
name = self.color_names[index]
|
|
self._color = name
|
|
rgb = self.colors[name]
|
|
self.cmap = ClearColormap(rgb)
|
|
|
|
if self._overlay_plot is not None:
|
|
self._overlay_plot.set_cmap(self.cmap)
|
|
self.image_viewer.redraw()
|