Hi all! i just found some colored glass and experimented a bit with these red/green 3d images, so i thought i'd share this simple script i wrote to generate such images with anyone whos interested. i also wouldn't mind some comments on the code.
see ya, David. *** anaglyph.py *** # uses PIL from http://www.pythonware.com/ # and numpy from http://www.scipy.org/ from PIL import Image import numpy _magic = [0.299, 0.587, 0.114] _zero = [0, 0, 0] _ident = [[1, 0, 0], [0, 1, 0], [0, 0, 1]] # anaglyph methods from here: # http://mitglied.lycos.de/stereo3d/anaglyphcomparison.htm true_anaglyph = ([_magic, _zero, _zero], [_zero, _zero, _magic]) gray_anaglyph = ([_magic, _zero, _zero], [_zero, _magic, _magic]) color_anaglyph = ([_ident[0], _zero, _zero], [_zero, _ident[1], _ident[2]]) half_color_anaglyph = ([_magic, _zero, _zero], [_zero, _ident[1], _ident[2]]) optimized_anaglyph = ([[0, 0.7, 0.3], _zero, _zero], [_zero, _ident[1], _ident[2]]) methods = [true_anaglyph, gray_anaglyph, color_anaglyph, half_color_anaglyph, optimized_anaglyph] def anaglyph(image1, image2, method=true_anaglyph): m1, m2 = [numpy.array(m).transpose() for m in method] im1, im2 = image_to_array(image1), image_to_array(image2) composite = numpy.matrixmultiply(im1, m1) + numpy.matrixmultiply(im2, m2) result = array_to_image(image1.mode, image1.size, composite) return result def image_to_array(im): s = im.tostring() dim = len(im.getbands()) return numpy.fromstring(s, numpy.UnsignedInt8).reshape(len(s)/dim, dim) def array_to_image(mode, size, a): return Image.fromstring(mode, size, a.reshape(len(a)*len(mode), 1).astype(numpy.UnsignedInt8).tostring()) if __name__=='__main__': im1, im2 = Image.open("left-eye.jpg"), Image.open("right-eye.jpg") anaglyph(im1, im2, half_color_anaglyph).save('output.jpg', quality=98) -- http://mail.python.org/mailman/listinfo/python-list