2012-02-16 16 views
15

私はリンゴのカラー写真を持っていますが、どのようにその輪郭(白、背景黒の中)だけをpython/PILで表示できますか?画像の概要python/PILを使用

+0

予想される入力のサンプル画像をいくつか含めます。 – mmgp

答えて

25

何かこれはうまくいくはずです。

from PIL import Image, ImageFilter 

image = Image.open('your_image.png') 
image = image.filter(ImageFilter.FIND_EDGES) 
image.save('new_name.png') 

それはあなたが、あなたがquestion関連参照PILやPythonや他のライブラリを使用してプレウィットエッジ検出、ソーベルエッジ検出やキャニーエッジ検出のいずれかを実行しようとすると、exampleを次を探している結果が得られない場合。

エッジ検出だけでなく粒子検出/解析を行う場合は、py4ijを使用して同じ結果が期待されるようにリンクするImageJメソッドを呼び出すか、別のParticle Analysis PythonライブラリEMAN PIL、S​​ciPy、NumPyを使って粒子検出アルゴリズムを書くことができます。

+0

こんにちは、 写真は色がついていて、グレースケールでフィルタを実行してもリンゴの輪郭がほしいと思うのでうまくいきません。 rsbweb.nih.gov/ij/docs/pdfs/examples.pdfに記載されているimageJメソッドのようなものです。 ありがとう – user1212200

+1

@ Appleman1234、私の記事を参照していただきありがとうございます。ちょっと、あなたはcannyエッジ検出モジュールをインポートし、それを実行してエッジだけを見つけることができます。出力はnumpyのndarrayになりますが、im = Image.fromarray(imarray)を使用してPILイメージに変換することができます – Vishwanath

+0

@ApplemanはFIND_EDGESに基づいてイメージをコンポーネントに分割できますか? – user1658296

4

高いコントラスト一(3色)にある場合、オブジェクトと背景がかなりよく

from PIL import Image 
image = Image.open(your_image_file) 
mask=image.convert("L") 
th=150 # the value has to be adjusted for an image of interest 
mask = mask.point(lambda i: i < th and 255) 
mask.save(file_where_to_save_result) 

を対比した場合は、グレースケールに変換するのではなく、バンドに画像を分割してもよいです。

画像や背景がかなり複雑な場合は、より洗練された処理が必要です