On Tue, Apr 28, 2009 at 4:13 PM, Eduardo Ismael <ei...@hotmail.com> wrote: > Thanks, John - I'll have a look at numpy and vips (and CIELAB) right away. > > I'm having trouble thinking out of the "for pixel in image" loop. Is it > possible to calculate with images and not pixels with PIL?
Sure - the trick is to figure out how to express your problem in terms of the basic operations provided by the Image object itself, by the ImageChops or ImageOps modules (which should be merged some day), etc. And in 1.1.6 and later, there's also the ImageMath module. http://effbot.org/imagingbook/imagemath.htm To do a distance calculation, you could do something like: target = (red, green, blue) distance = 10 # calculate a distance mask R, G, B = target r, g, b = im.split() distance3 = distance ** 3 mask = ImageMath.eval( "convert(((abs(r - R)*abs(g - G)*abs(b - B)) < distance3)*255, 'L')", **locals()) # paste in some nice color on pixels that are "close" to the target color im.paste("white", mask) (no time to do benchmarking and detailed testing, but the above should be fairly efficient) </F> _______________________________________________ Image-SIG maillist - Image-SIG@python.org http://mail.python.org/mailman/listinfo/image-sig