2017年12月2日 星期六

Python 影像的反白與存檔


還是先嘮叨講一句,Python有很多外掛的Package,在影像處理方面最常用的是PIL (pillow),但不是唯一的方法。坊間有很多關於Python的參考書籍,介紹不同Package的用法,初學者要先確定這倒底Python的基本指令,還是某個外掛的方法。


上次講到利用 PIL Image 來讀取影像並顯示(這裡),這次繼續往下講。
先顯示一下使用的測試影像

↓我把LENA影像裁成100x200,並命名為test.jpg,下圖只是讓大家看一下測試影像

要做影像處理得先知道影像的幾個常見的基本屬性,才能進一步處理

↓顯示test.jpg的四個屬性

mode顯示這是哪一種影像?黑白、灰階,還是全彩的?上圖mode=L,代表test.jpg是一灰階影像。其它常見的mode值如下:

1→黑白影像(這是數字壹,不是英的小寫L)
L→8位元的灰階影像,所以有256階
P→調色盤影像,每個影像點對映到調色盤一種顏色,共有256色,所以每個像點也佔8位元
RGB→全彩影像
RGBA→全彩加上透明度
.....

width與height容易理解,就是影像的寬與高;

getpixel((x,y)) 影像在座標(x, y)的值,x範圍在0..(width-1),y的範圍在0..(height-1)
初學者最容易搞錯的地方是寫成 getpixel(x,y),注意:座標要多一對小括弧
另外,如果是全彩影像,getpixel得到三重值,即 r,g,b = getpixel((x,y))。也就是說 getpixel 傳回值與它的mode有很大的關係

========= 影像反白 ==========
現在來舉一個影像處理簡單例子,也就是將影像反白;假設原影像值為a,反白後變成255-a。


上面的例子很簡單,只用到一個新指令putpixel(座標,影像值)來設定像素值。上例可以推廣到其他方面,例如:取臨界值(thresholding)、簡單的加減乘除...。只是利用這種方式來做影像處理,效果並不好,最好的方式還是將影像轉換到矩陣,再透過矩陣運算來達到影像處理的目的,這個問題以後再慢慢聊!(用矩陣反白按這裡)

↓最後將反白的影像另儲為test.bmp (原影像是jpg)


↓存在資料夾中的反白影像 test.bmp

-- END --

沒有留言:

張貼留言