Python圖形影像處理庫的介紹之Image模組.__Python

來源:互聯網
上載者:User
   

Image模組的介紹

建立一個新的圖片 Python代碼   Image.new(mode, size)    Image.new(mode, size, color)  

Image.new(mode, size)Image.new(mode, size, color)

 


層疊圖片
層疊兩個圖片,img2和img2,alpha是一個介於[0,1]的浮點數,如果為0,效果為img1,如果為1.0,效果為img2。當然img1和img2的尺寸和模式必須相同。這個函數可以做出很漂亮的效果來,而圖形的算術加減後邊會說到。 Python代碼   Image.blend(img1, img2, alpha)  

Image.blend(img1, img2, alpha)



 
composite可以使用另外一個圖片作為蒙板(mask),所有的這三張圖片必須具備相同的尺寸,mask圖片的模式可以為“1”,“L”,“RGBA”(關於模式請參看前一篇) Python代碼   Image.composite(img1, img2, mask)  

Image.composite(img1, img2, mask)



 

轉換圖形模式
下面看一個比較牛的方法convert,這個方法可以將圖片在不同的模式間進行轉換,在將灰階圖轉換成二值圖時,所有的非零值被設定為255(白色)。灰階圖的轉換方式採用的是這個演算法: 寫道 L = R*299/1000 + G*587/1000 + B*114/1000

 

(此為ITU-R 610-2 亮度轉換方程)

 



 




 
點操作
img.point(function),這個function接受一個參數,且對圖片中的每一個點執行這個函數,這個函數是一個匿名函數,在python之類的函數式程式設計語言中,可以使用
lambda運算式來完成,如 Python代碼   out = img.point(lambda i : i*1.2)#對每個點進行20%的加強  

out = img.point(lambda i : i*1.2)#對每個點進行20%的加強


如果圖片是“I”或者“F”模式,那麼這個lambda必須使用這樣的形式

  Python代碼   argument * scale + offset       e.g    out = img.point(lambda i: i*1.2 + 10)  

argument * scale + offsete.gout = img.point(lambda i: i*1.2 + 10)

 



透明通道的使用
putalpha(alpha)
這個方法是一個神奇的方法,你可以將一個圖片(與原圖尺寸相同)寫入到原圖片的透明通道中,而不影響原圖片的正常顯示,可以用於資訊隱藏哦。當然,前提是原
始圖片有透明通道。不過就算不是也沒有多大關係,因為有PIL提供的convert功能,可以把一個圖片先轉換成RGBA模式,然後把要隱藏的資訊檔轉成“L”或者“1”模
式,最後使用這個putalpha將其疊加。而在圖片的使用方,只需要簡單的抽取其中的透明通道就可以看到隱藏資訊了,哈哈。
Python代碼   def hideInfoInImage(img, info):        if img.mode != "RGBA":            img = img.convert("RGBA")        if info.mode != "L" and info.mode != "1":            info = info.convert("L")        img.putalpha(info)           return img  

def hideInfoInImage(img, info):    if img.mode != "RGBA":        img = img.convert("RGBA")    if info.mode != "L" and info.mode != "1":        info = info.convert("L")    img.putalpha(info)    return img

 


測試之 Python代碼   if __name__ == "__main__":        img = Image.open("green.png")        band = Image.open("antelope_inhalf.jpg")           img = hideInfoInImage(img, band)        img.show()#可以看到,原圖片沒有顯式變化        img.split()[3].show()#抽取出透明通道中的圖片並顯示  

if __name__ == "__main__":    img = Image.open("green.png")    band = Image.open("antelope_inhalf.jpg")    img = hideInfoInImage(img, band)    img.show()#可以看到,原圖片沒有顯式變化    img.split()[3].show()#抽取出透明通道中的圖片並顯示



 

 

在windows系統中,預設的圖片瀏覽器會把透明通道附加,可能會影響效果,可以用別的圖片瀏覽器查看。
Python代碼   def randomPalette(length, min, max):        return [ randint(min, max) for x in xrange(length)]  

def randomPalette(length, min, max):    return [ randint(min, max) for x in xrange(length)]


調色盤的使用 Python代碼   putpalette(palette)        img = Image.open("green.png").convert("L")        #img.show()        l = randomPalette(768, 0, 255)        img.putpalette(l)        img.show()  

putpalette(palette)    img = Image.open("green.png").convert("L")    #img.show()    l = randomPalette(768, 0, 255)    img.putpalette(l)    img.show()



 
現將green.png轉成灰階圖,然後自訂一個隨機調色盤著色,可以看到這個效果。可能有人在想這個圖形處理的作用,其實作用還是比較大的,做模式識別,人臉檢
測等等操作事,真彩的圖片往往很難處理,一個解決方案就是處理成灰階圖或者二值圖,一來可以去掉部分幹擾,二來可以減少需要處理的資料量(提高效率)。

圖片轉換(扭曲,映射)
transform()方法的使用 Python代碼   transform(size, method, data)  

transform(size, method, data)


method參數:

 

EXTENT 剪一個矩形出來(用以剪下,展開,壓縮等操作)
AFFINE 幾何防射轉換
QUAD 將一個四邊形映射到一個矩形
MESH 將多個四邊形映射到一個操作



在EXTENT參數的情況下,data是一個四元組(x0,y0,x1,y1),表示輸入圖片中需要處理的地區,size為新圖片的尺寸,是一個二元組(width, height)
用途:剪貼,展開,壓縮等操作

 



 
在AFFINE參數的情況下,data是一個六元組(a,b,c, d,e,f),其中包含affine轉置矩陣的前兩行。對於輸出圖片的每個像素(x,y),會被新值(ax+by+c, dx+ey+f)替換。
用途:反轉,旋轉,剪下等

 



 

在QUAD參數的情況下,data是一個八元組(x0,y0,x1,y1,x2,y2,x3,y3)表示源四邊形的四個定點的座標值.MESH方式跟QUAD的效果相當,不過是對多個四邊形進行映射操作.

 


 

transpose Python代碼   im.transpose(method)  

im.transpose(method)

method參數:

 

FLIP_LEFT_RIGHT 左右倒置
FLIP_TOP_BOTTOM 上下倒置
ROTATE_90 旋轉90度(逆時針)
ROTATE_180 旋轉180度(逆時針)
ROTATE_270 旋轉270度(逆時針)


(360度?這個就不用轉了吧,呵呵)

 

關於Image模組就介紹到這裡,還有一部分屬性,函數和方法沒有在此做分析,這部分比較簡單,如果想瞭解更多,可以參看pil的handbook。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.