2012-05-16 20 views
30

PILの画像上の空白をトリミングする簡単なソリューションはありますか?PILを使用して空白を切り取る

ImageMagickには、次のようにそれのための簡単なサポートを持っている:私はPILのためのソリューション見つけ

convert test.jpeg -fuzz 7% -trim test_trimmed.jpeg 

from PIL import Image, ImageChops 

def trim(im, border): 
    bg = Image.new(im.mode, im.size, border) 
    diff = ImageChops.difference(im, bg) 
    bbox = diff.getbbox() 
    if bbox: 
     return im.crop(bbox) 

をしかし、この解決策には欠点があります。

  1. 私がする必要がborderの色を定義する、それは私のために大したことではない、私の画像は白い背景を持っている
  2. そして最も不利な点は、このPILソリューションはImageMagickの-fuzzキーをサポートしていないことです。ファジィクロッピングを追加する。いくつかのjpeg圧縮アーティファクトと不必要な巨大な影を持つことができます。

PILにはいくつかの機能が組み込まれていますか? またはいくつかの高速なソリューションがありますか?

+1

私は、コードを知っているがまったく同じであるが、それはまたここに見つけることができる - https://gist.github.com/mattjmorrison/932345 –

答えて

74

これを行うことができるPILには何も組み込まれていないと思います。しかし、私はあなたのコードを修正しています。

  • getpixelを使用して左上のピクセルから境界線の色を取得するため、色を渡す必要はありません。
  • 差分画像からスカラーを差し引くと、100, 100, 100(私の例では)以下のすべての値をゼロにすばやく収めることができます。圧縮に起因する「ウォブル」を除去するためのきれいな方法です。

コード:

from PIL import Image, ImageChops 

def trim(im): 
    bg = Image.new(im.mode, im.size, im.getpixel((0,0))) 
    diff = ImageChops.difference(im, bg) 
    diff = ImageChops.add(diff, diff, 2.0, -100) 
    bbox = diff.getbbox() 
    if bbox: 
     return im.crop(bbox) 

im = Image.open("bord3.jpg") 
im = trim(im) 
im.show() 

重圧縮されたJPEG:

enter image description hereクロップ:enter image description here

雑音JPEG:

enter image description hereクロップ:enter image description here

+4

この私がいましたさ探しています。それは魔法のように機能します。おかげさまで –

+0

@Ideviantik - クール、やや簡略化しました。楽しい。白の記事は、白い背景の上に配置されている場合例えば、写真のための - それは、国境で​​のノイズを補うんが、あなたは、もはや背景と画像自体は非常に似ている画像を処理することができます:あなたがやっている操作は非常に危険ではないこと – fraxel

+5

注意。 –

2

ワンドを使用http://docs.wand-py.org/en/0.3-maintenance/wand/image.html

トリム(カラー=なし、ファズ= 0) 画像から実線の枠線を削除します。デフォルトで左上のピクセルをガイドとして使用するか、削除する色を指定することもできます。

1

ufp.imageモジュールでトリム機能を使用しています。

import ufp.image 
import PIL 
im = PIL.Image.open('test.jpg', 'r') 
trimed = ufp.image.trim(im, fuzz=13.3) 
trimed.save('trimed.jpg') 

例を参照してください。Trim image edge whitespace with fuzz [Python]

+1

。削除することをお勧めします。 –

関連する問題