2012-03-18 19 views
2

pythonでPILを使用して、ピクセルRGB値に基づいて画像の一部を削除しようとしています。ドキュメントから、私が探しているものを機能ポイントが実行できるように見えます。しかし、私はドキュメントの後に苦労しています。青の値が100未満のすべてのピクセルを白に変更したい場合、これを達成する最も簡単な方法は何ですか?Python PILは画像の部分を色に基づいて削除します

答えて

1

何かが働くだろう:

source = im.split() 
mask = source[2].point(lambda i: i < 100 and 255) 
im = Image.merge(im.mode, source) 

は、より多くのINFOMATIONに向かっ小数点演算PIL Tutorialを参照してください。

2

これを行う最も簡単な方法は、Mahotas libraryを使用して、NumPy ndarraysとして画像を読み込むことです。それでは、イメージ上で論理インデックスを使用するだけです。

import Mahotas as mh 
import numpy as np 

fname = "/home/stuff/images/my_image.jpg" 
image = mh.imread(fname) 

# Make a copy to play with the indices. 
img = np.copy(image) 

# Replace places with 3rd coordinate less than 100 with the white-color 
# vector [255, 255, 255]. 
inds = img[:,:,2] < 100 
img[inds] = [255,255,255] 

利点はMahotasは、右あなたが簡単にnumpyの一貫性のある構文で異なる寸法をスライスすることができますnumpyの配列に画像をロードすることです。また、PILでイメージI/Oを実際に実行したい場合は、イメージをNumPy配列に変換するPILの関数を探して、上記のコードは引き続き機能します。

しかし、私はいつもPILが真に働くように一貫した問題を抱えてきました。画像ファイルタイプサポートの問題、デコーダの問題、PILの問題などがあるようです。それは非常に難解です。私は一般的に同じ理由でPython-OpenCVを避けるようにしています。私はscikits.learn、scikits.image、Mahotas、PyPNGのワークフローを好む。次のような

関連する問題