from skimage import data
from skimage.filter import canny

from skimage.viewer import ImageViewer
from skimage.viewer.widgets import Slider
from skimage.viewer.plugins.overlayplugin import OverlayPlugin


image = data.camera()
# Note: ImageViewer must be called before Plugin b/c it starts the event loop.
viewer = ImageViewer(image)
# You can create a UI for a filter just by passing a filter function...
plugin = OverlayPlugin(image_filter=canny)
# ... and adding widgets to adjust parameter values.
plugin += Slider('sigma', 0, 5, update_on='release')
plugin += Slider('low threshold', 0, 255, update_on='release')
plugin += Slider('high threshold', 0, 255, update_on='release')
# Finally, attach the plugin to the image viewer.
viewer += plugin
viewer.show()

@@ -133,16 +133,71 @@
  Slider%0A
+from skimage.viewer.widgets.history import SaveButtons%0A
 from ski
@@ -279,114 +279,8 @@
 a()%0A
-# Note: ImageViewer must be called before Plugin b/c it starts the event loop.%0Aviewer = ImageViewer(image)
 %0A# Y
@@ -624,16 +624,119 @@
 lease')%0A
+# ... and we can also add buttons to save the overlay:%0Aplugin += SaveButtons(name='Save overlay to:')%0A%0A
 # Finall
@@ -759,19 +759,18 @@
 ugin to 
-the
+an
  image v
@@ -776,16 +776,44 @@
 viewer.%0A
+viewer = ImageViewer(image)%0A
 viewer +

Add save buttons to viewer example.