Extract external contour or silhouette of image in Python

image-processing, matplotlib, python

Solution

If you want to stick with your contour approach you can simply add a levels argument with a value 'thresholding' the image between the white background and the leaf.

You could use the histogram to find an appropriate value. But in this case any value slightly lower than 255 will do.

So:

contour(im, levels=[245], colors='black', origin='image')

Make sure you checkout Scikit-Image if you want to do some serious image processing. It contains several edge detection algoritms etc.

http://scikit-image.org/docs/dev/auto_examples/

Problem

I want to extract the silhouette of an image, and I'm trying to do it using the contour function of MatplotLib. This is my code: ``` from PIL import Image from pylab import * # read image to array im = array(Image.open('HOJA.jpg').convert('L')) # create a new figure figure() # show contours with origin upper left corner contour(im, origin='image') axis('equal') show() ``` This is my original image: And this is my result: But I just want to show the external contour, the silhouette. Just the read lines in this example. How can I do it? I read the documentation of the contour function, but I can't get what I want. If you know a better way to do this in Python, please tell me! (MatplotLib, OpenCV, etc.)

Original source