2012-03-18 99 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) 

PIL Tutorial點運算走向更多資料。

2

我認爲最簡單的方法是使用Mahotas library,它可以讓你把圖像加載到NumPy程序。然後你可以在你的圖像上使用邏輯索引。

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,那麼你應該在PIL中尋找可以將圖像轉換爲NumPy數組的函數,然後上面的代碼仍然可以工作。

總的來說,我總是有一致的問題讓PIL真正的工作。似乎總會有某種圖像文件類型支持問題,某些解碼器問題,或其他一些PIL出錯的問題。這非常挑剔。出於同樣的原因,我通常會盡量避免使用Python-OpenCV。我更喜歡scikits.learn,scikits.image,Mahotas和PyPNG的工作流程。