2014/06/15(日) [n年前の日記]
#3 [python] 画像の周辺の黒い部分をトリミングするPythonスクリプト
Python + PIL で、トリミング作業の実験。
getbbox() で、周辺の黒い部分を取り除いた領域の値を得られるらしい。
そんな便利なメソッドがあったとは知らなかったものだから、画像のドット数分、getpixel() を使って1ドットずつチマチマと全部チェックして、コレはさすがに処理が遅すぎるわ、高速化できんかなー、とか思ってました。getbbox() を使ったら一瞬で処理が終わってしまった…。
from optparse import OptionParser import os.path import glob try: import Image except ImportError: from PIL import Image ver = "0.0.1" def chk_args(): """コマンドラインオプションを解析.""" parser = OptionParser(usage = "%prog [--trim] img\*.png", version = "%prog " + ver) parser.add_option("--trim", dest="trim", action="store_true", default=False, help="Trim exec") (opts, args) = parser.parse_args() if len(args) == 0: parser.print_help() exit return (opts, args) def open_image(fn, enable_trim): """画像ファイルを開いて情報を調べる.""" if not os.path.isfile(fn): print "Not Found %s" % fn return im = Image.open(fn).convert('RGB') w, h = im.size xmin, ymin, xmax, ymax = im.getbbox() xw = xmax - xmin yh = ymax - ymin print "DrawArea (%d, %d) - (%d, %d) : %d x %d : Img Size %d x %d : %s" % \ (xmin, ymin, xmax, ymax, xw, yh, w, h, fn) if enable_trim: region = im.crop((xmin, ymin, xmax, ymax)) dn = os.path.dirname(fn) bn = os.path.basename(fn) new_fn = os.path.join(dn, "trim_%s" % bn) region.save(new_fn) def main(): (opts, args) = chk_args() for fng in args: for fn in glob.glob(fng): open_image(fn, opts.trim) if __name__ == '__main__': main()
getbbox() で、周辺の黒い部分を取り除いた領域の値を得られるらしい。
そんな便利なメソッドがあったとは知らなかったものだから、画像のドット数分、getpixel() を使って1ドットずつチマチマと全部チェックして、コレはさすがに処理が遅すぎるわ、高速化できんかなー、とか思ってました。getbbox() を使ったら一瞬で処理が終わってしまった…。
◎ 2014/06/17追記。 :
[ ツッコむ ]
以上です。