Linking events in skimage.viewer

Steven Silvester steven.silvester at gmail.com
Mon Dec 23 10:50:29 EST 2013


Nadav,

You want the slider to update the value as it is moving? If so, pass
update_on="move" to Slider(). I tried your example, and my view does update
on key presses. I am using skimage 0.9.3 on Windows 7.

import matplotlib.pyplot as pltfrom skimage import datafrom skimage
import viewerfrom skimage.viewer.plugins.overlayplugin import
OverlayPluginfrom skimage.viewer.widgets import Slider
class Cimage(object):

    def __init__(self):
        self.recname = 'howdy'
        self.rgb_image = data.camera()
        self.gamma = 1

    def key_press(self, event):
        self.view.image = self.view.image[::-1]

    def image_update(self, image, **kwargs):
        return image[::-1] - int(kwargs['gamma']) * 5

    def create_window(self):
        self.view = viewer.ImageViewer(self.rgb_image)

        plugin = OverlayPlugin(image_filter=self.image_update)
        plugin += Slider('gamma', 1.0, 3.0, value=self.gamma,
orientation='vertical', update_on='move')
        plugin += Slider('mat mix', 0.0, 1.0, value=0.0,
update_on='move', orientation='vertical')
        plugin += Slider('wb mix', 0.0, 1.0, value=0.0,
update_on='move', orientation='horizontal')

        self.view += plugin
        self.view.connect_event('key_press_event', self.key_press)
        self.view.setWindowTitle(self.recname)
        self.view.show()
def main():
    a = Cimage()
    a.create_window()
if __name__ == '__main__':
    main()

About my earlier example, you would need to call f.canvas.show instead of
plt.show (I ran the code this time). But, if the MPLCanvas methods work,
I’d stick with those.

Cheers,
Steve


On Mon, Dec 23, 2013 at 8:10 AM, Nadav Horesh <nadavh.horesh at gmail.com>wrote:

> Tony,
> I found the .connect_event method of the ImageViewer class just before
> I got the reply from you, and it roughly works. I say roughly because
> in the application there are some sliders that I added (not a part of
> the built-in plugins), and what I see that I see an image update only
> after I touch the sliders. In the linetool, however, the response is
> immediate.
>
> Code snippet:
>
> class Cimage:
> .
> .
> .
>     def create_window(self):
>         self.view = viewer.ImageViewer(self.rgb_image)
>
>         plugin = OverlayPlugin(image_filter=self.image_update)
>         plugin += Slider('gamma', 1.0, 3.0, value=self.gamma,
> orientation='vertical')
>         plugin += Slider('mat mix', 0.0, 1.0, value=0.0,
> update_on='move', orientation='vertical')
>         plugin += Slider('wb mix', 0.0, 1.0, value=0.0,
> update_on='move', orientation='horizontal')
>
>         self.view += plugin
>         self.view.connect_event('key_press_event', self.key_press)
>         self.view.setWindowTitle(self.recname)
>         self.view.show()
> .
> .
> .
> in the key_press method execution chain I have
> self.view.image = new_image
>
> so the image is updated, but it does not trigger a display update.
>
>
>
> Steve,
> Here is your code after some typos correction:
>
> #! /usr/bin/python
>
> from __future__ import print_function
>
> from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg
> import matplotlib.pyplot as plt
> from skimage import data
>
>
> class MyCanvas(FigureCanvasQTAgg):
>
>     def mousePressEvent(self, event):
>         #pass
>         print('press')
>         self.image = self.image[::-1]
>
> def main():
>     image = data.camera()
>     f, ax = plt.subplots()
>     f.canvas = MyCanvas(f)
>     ax.imshow(image, interpolation='nearest')
>     h, w = image.shape
>     plt.show()
>
>
> if __name__ == '__main__':
>     main()
>
> Running it I see that the method mousePressEvent is not being called
>
>  I'll be happy to know if there is something to follow and build an
> application based on the viewer module.
>
> Thank you both very much
>
> Nadav
>
>
> 2013/12/23 Steven Silvester <steven.silvester at gmail.com>:
> > Nadav,
> >
> > The canvas itself is a
> matplotlib.backends.backend_qt4agg.FigureCanvasQTAgg.
> > If you wanted, you could subclass that class and provide your own
> > mousePressEvent and friends. Something like:
> >
> > from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg
> > import matplotlib.pyplot as plt
> > from skimage import data
> >
> >
> > class MyCanvas(FigureCanvasQtAgg):
> >
> >     def mousePressEvent(self, event):
> >         pass
> >
> > def main():
> >     image = data.camera()
> >     f, ax = plt.subplots()
> >     f.canvas = MyCanvas()
> >     ax.imshow(image, interpolation='nearest')
> >     h, w = image.shape
> >     plt.show()
> >
> > On Wednesday, December 18, 2013 2:13:02 AM UTC-6, Nadav Horesh wrote:
> >>
> >> I
> >> I started to build an interactive image exploration utility based on
> >> matplotlib.  Recently, following a link on this list, I encountered
> >> skimage.viewer, and found that the plugins architecture matches my
> needs.
> >> I could not find how to link keyboard and mouse events (and maybe
> buttons)
> >> to plugins. Any suggestions?
> >>
> >> I am using version 0.93 on linux (I can install the pre 0.10, if needed)
> >>
> >>  Thanks,
> >>
> >>     Nadav
> >
> > --
> > You received this message because you are subscribed to the Google Groups
> > "scikit-image" group.
> > To unsubscribe from this group and stop receiving emails from it, send an
> > email to scikit-image+unsubscribe at googlegroups.com.
> > For more options, visit https://groups.google.com/groups/opt_out.
>
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "scikit-image" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/scikit-image/pRZYHjAW78U/unsubscribe.
> To unsubscribe from this group and all of its topics, send an email to
> scikit-image+unsubscribe at googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/scikit-image/attachments/20131223/ac1ea8ea/attachment.html>


More information about the scikit-image mailing list