[Tkinter-discuss] how to get all pixels enclosed by a canvas object

Peng yahuip at uchicago.edu
Tue Jun 21 19:30:53 CEST 2011


The task is straightforward.  I want to select a certain region of an
image and plot, for example, the distribution of pixel values within
that region.  Therefore, I want to have the pixels coordinates so that I
can select those pixel to get their values.

What I am doing now is to use canvas to display the image and define
callbacks attached to mouse click events to generate an object that
encloses the region I want to have.  The trouble I have now is that
after I generate a (for example) polygon object in a canvas, I do not
know how I can get all pixels enclosed by the polygon object.

I am new to Tkinter and I think there must be an easy way to get it
done.

Thanks,
Yahui

On Tue, 2011-06-21 at 10:04 -0700, Lion Kimbro wrote:
> 
> 
>   Are you talking about making, say, a clickable image-map ..?
>   Or perhaps semantic regions? [1]
> 
>   I guess what I'm wondering is:
>   * Why do you need to get all of the pixel coordinates within the
> region (within the shape,)
>   * ...and:  is there an easier way to do what you are wanting to do?
> 
>   For example, if you were wanting to make a clickable image-map,
>   then I'd want to check, "Do you know that you can attach events to
> clicks
>   on the objects in the canvas?"
> 
>   Or if you are trying to do collision detection, you might want to
> look at:
> 
> http://www.rhinocerus.net/forum/lang-tcl/597392-overlapping-items-tk-canvas.html
>   ...or you might want to use canvas.find_overlapping dynamically,
>   rather than getting at the original data, ...
> 
>   (etc.,.)
> 
> 
> [1] Semantic Regions
>   http://hcil.cs.umd.edu/trs/2004-05/2004-05-revised.pdf
> 
> 
> On Tue, Jun 21, 2011 at 6:20 AM, Peng <yahuip at uchicago.edu> wrote:
>         Thanks for your reply, Lion.
>         
>         What I want to do is to select a region of interest (ROI) in a
>         given
>         image.  I can display the image in a canvas widget and use
>         canvas.create_#object#() method to generate an ROI on the
>         screen.
>         However, I could not find a way to get all pixel coordinates
>         inside the
>         ROI.  I have found that canvas.coors() returns pixel
>         coordinates but
>         they do not normally form a close contour.  What I was
>         wondering is
>         whether there is a simple way to get all pixels inside an
>         object that is
>         created by canvas.create_#object#() method.
>         
>         I see your suggestion is a possible way: get the bbox() return
>         values
>         for the object and test each pixel (or a small box) to see
>         whether or
>         not it is inside the object.  But are there easier and more
>         direct ways
>         to do this?
>         
>         Yahui
>         
>         
>         On Mon, 2011-06-20 at 23:39 -0700, Lion Kimbro wrote:
>         >
>         >   I'm not sure what you mean, but perhaps you are looking
>         for:
>         >
>         > canvas.find_enclosed(x1, y1, x2, y2)     => [objID,
>         objID, ...]
>         > completely enclosed
>         > canvas.find_overlapping(x1, y1, x2, y2)  => [objID,
>         objID, ...]
>         > sharing at least 1 point
>         >
>         >   ..?
>         >
>         >
>         > On Mon, Jun 20, 2011 at 7:59 PM, <yahuip at uchicago.edu>
>         wrote:
>         >         Hi there,
>         >
>         >         I have been struggling to find a way to retrieve all
>         pixel
>         >         coordinates that are enclosed by an object drawn on
>         a canvas
>         >         widget.  Anyone knows how I can do it?
>         >
>         >         Thanks,
>         >         Yahui
>         >         _______________________________________________
>         >         Tkinter-discuss mailing list
>         >         Tkinter-discuss at python.org
>         >
>         http://mail.python.org/mailman/listinfo/tkinter-discuss
>         >
>         
>         
>         
> 




More information about the Tkinter-discuss mailing list