Hey guys:

Charlie I did not find your lasso example so I cooked up mine, I attach it.
Can you give me the file name that contains the new Lasso widget for "doodling" ?

This is just the start of the lasso or "region of interest" widget I still have to :
   - fill the region with a color
   - make it work with layers
   - add methods that return the pixel region or the contour coordinates
   - make a nice class

If anybody has made such a widget I would love to see the code, I hate reinventing the wheel.

If there is not such an example such as the lasso tool, can my example be added to the examples ?
What is the process ?

Anyway, I can't believe there is not such a widget, I thought there must be some people that use matplotlib for Digital Image Processing ?
Isn't there ?

Any critique on my code would be appreciated, I have never programed with matplotlib ...


                                                                  Daniel.




Charlie Moad wrote:
On 8/4/06, Daniel Kornhauser <[EMAIL PROTECTED]> wrote:
Hi:

Just stared playing with matplotlib, I want to draw a polygon on top of
an image to select a region of interest in the image.
Does anybody have any example or advice on how to interactively draw a
polygon with the mouse by placing it's vertices's one click at a time ?
Another case that I have would be just to fill a region with a thick
line, searched for a "doodle example" or a "paint example" but could not
find them, any advice would be appreciated too.

Look in at the widget examples.  There is a new Lasso widget for
"doodling" and a RectangleSelector.

- Charlie

#!/usr/bin/env python
"""
This example shows how to use matplotlib to create regions of interest.  
I has two modes:
     - the segment mode, each time you click the mouse you can create a line 
segment 
     - the free hand mode, by keeping pressed the right button you can create a 
iregular contour 
The right button closes the loop.
Daniel Kornhauser
"""
from pylab import *

class ROI:
    
    def __init__(self, ax, fig):
        self.previous_point = []
        self.start_point = []
        self.end_point = []
        self.line = None    
        
        self.fig =  fig
        self.fig.canvas.draw()
        
    def motion_notify_callback(self, event):
        if event.inaxes: 
            ax = event.inaxes
            x, y = event.xdata, event.ydata
            if event.button == None and self.line != None: # Move line around 
                self.line.set_data([self.previous_point[0], x],
                                   [self.previous_point[1], y])      
                self.fig.canvas.draw()
            elif event.button == 1: # Free Hand Drawing
                    line = Line2D([self.previous_point[0], x],
                                  [self.previous_point[1], y])                  
  
                    ax.add_line(line)
                    self.previous_point = [x, y]
                    self.fig.canvas.draw()

        
    def button_press_callback(self, event):
        if event.inaxes: 
            x, y = event.xdata, event.ydata
            ax = event.inaxes
            if event.button == 1:  # If you press the right button
                    if self.line == None: # if there is no line, create a line
                        self.line = Line2D([x,  x],
                                           [y, y],
                                           marker = 'o')
                        self.start_point = [x,y]
                        self.previous_point =  self.start_point 
                        ax.add_line(self.line)
                        self.fig.canvas.draw()
                    # add a segment
                    else: # if there is a line, create a segment
                        self.line = Line2D([self.previous_point[0], x], 
                                           [self.previous_point[1], y],
                                           marker = 'o')
                        self.previous_point = [x,y]
                        event.inaxes.add_line(self.line)
                        self.fig.canvas.draw()

            elif event.button == 3 and self.line != None: # close the loop
                        self.line.set_data([self.previous_point[0], 
self.start_point[0]],
                                           [self.previous_point[1], 
self.start_point[1]])                       
                        ax.add_line(self.line)
                        self.fig.canvas.draw()
                        self.line = None

def main():
    fig = figure()
    ax = fig.add_subplot(111)
    ax.set_title(" left click: line segment       left pressed: doodle        
right click: close region")
    cursor = ROI(ax, fig)
    fig.canvas.mpl_connect('motion_notify_event', cursor.motion_notify_callback)
    fig.canvas.mpl_connect('button_press_event', cursor.button_press_callback)
    show()

if __name__ == "__main__":
    main()    
-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to