mieki256's diary



2014/06/15() [n年前の日記]

#3 [python] 画像の周辺の黒い部分をトリミングするPythonスクリプト

Python + PIL で、トリミング作業の実験。
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追記。 :


以上です。

過去ログ表示

Prev - 2014/06 - Next
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project