Skip to content

Instantly share code, notes, and snippets.

@t0ster
Created February 24, 2011 20:51
Show Gist options
  • Save t0ster/842858 to your computer and use it in GitHub Desktop.
Save t0ster/842858 to your computer and use it in GitHub Desktop.
import sys
import argparse
import Image
import ImageFilter
from numpy import exp, mgrid
def resize(args):
image = Image.open(args.image)
new_size = [s * args.n for s in image.size]
image = image.resize(new_size)
image.save(generate_new_filename(args.image, 'resized'), 'JPEG')
def gaus_filter(args):
image = Image.open(args.image)
image = image.filter(GAUSSIAN)
image.save(generate_new_filename(args.image, 'gauss'), 'JPEG')
def gaussian_grid(size=5):
"""
Create a square grid of integers of gaussian shape
e.g. gaussian_grid() returns
array([[ 1, 4, 7, 4, 1],
[ 4, 20, 33, 20, 4],
[ 7, 33, 55, 33, 7],
[ 4, 20, 33, 20, 4],
[ 1, 4, 7, 4, 1]])
"""
m = size / 2
n = m + 1 # remember python is 'upto' n in the range below
x, y = mgrid[-m:n, -m:n]
# multiply by a factor to get 1 in the corner of the grid
# ie for a 5x5 grid fac*exp(-0.5*(2**2 + 2**2)) = 1
fac = exp(m ** 2)
g = fac * exp(-0.5 * (x ** 2 + y ** 2))
return g.round().astype(int)
class GAUSSIAN(ImageFilter.BuiltinFilter):
name = "Gaussian"
gg = gaussian_grid().flatten().tolist()
filterargs = (5, 5), sum(gg), 0, tuple(gg)
def generate_new_filename(path, word):
part1, part2 = path.split('.')
return '%s_%s.%s' % (part1, word, part2)
def get_parser():
parser = argparse.ArgumentParser(
epilog="Example usage:\n python %s gauss image.jpg\n"
" python %s resize 3 image.jpg" % (sys.argv[0], sys.argv[0]),
formatter_class=argparse.RawDescriptionHelpFormatter
)
subparsers = parser.add_subparsers()
parser_res = subparsers.add_parser('resize', help='enlarges imges n times')
parser_res.add_argument('n', type=int, help='resizing coefficient')
parser_res.add_argument('image', type=str, help='path to jpg image file')
parser_res.set_defaults(func=resize)
parser_filt = subparsers.add_parser('gauss', help='gaussian filter')
parser_filt.add_argument('image', type=str, help='path to jpg image file')
parser_filt.set_defaults(func=gaus_filter)
return parser
def main():
args = get_parser().parse_args()
args.func(args)
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment