Python圖像處理常用操作技巧總結
Python編程語言在實際應用中為我們帶來了非常大的好處。其簡單易用的好處極大的吸引了大部分開發人員的眼球。在這里我們將會通過對Python圖像處理的相關方法,來體驗一下這一語言給我們帶來的好處。#t#
雖然圖像處理的最佳工具是MATLAB的圖像處理工具箱,但是在進行一些“簡單的”圖像處理任務或者大批量的簡單圖像處理任務的時候,Python圖像處理的方法更有優勢。
1.引言:
提到圖像處理,人們通常想到的工具是MATLAB。誠然,MATLAB提供了一個強大的圖像處理工具箱。但是,對于簡單的圖像處理任務而言,采用一種高級的語言將起到事半功倍的效果。Python無疑就是實現這一功能的理想選擇。Python的面向對象、弱數據類型等等特性都使得用它來進行簡單的圖像處理的時候非常的簡潔方便。
2.簡介:
PythonWare公司提供了免費的Python圖像處理工具包PIL(Python Image Library),該軟件包提供了基本的圖像處理功能,如:改變圖像大小,旋轉圖像,圖像格式轉換,色場空間轉換,圖像增強,直方圖處理,插值和濾波等等。雖然在這個軟件包上要實現類似MATLAB中的復雜的圖像處理算法并不太適合,但是Python的快速開發能力以及面向對象等等諸多特點使得它非常適合用來進行原型開發。
在PIL中,任何一副圖像都是用一個Image對象表示,而這個類由和它同名的模塊導出,因此,要加載一副圖像,最簡單的形式是這樣的:
- import Image
- img = Image.open(“dip.jpg”)
注意:第一行的Image是模塊名;第二行的img是一個Image對象; Image類是在Image模塊中定義的。關于Image模塊和Image類,切記不要混淆了?,F在,我們就可以對img進行各種操作了,所有對img的操作最終都會反映到到dip.img圖像上。
PIL提供了豐富的功能模塊:Image,ImageDraw,ImageEnhance,ImageFile等等。最常用到的模塊是Image,ImageDraw,ImageEnhance這三個模塊。下面我對此分別做一介紹。關于其它模塊的使用請參見說明文檔.有關PIL軟件包和相關的說明文檔可在PythonWare的站點www.Pythonware.com上獲得。
3.Image模塊:
Image模塊是PIL最基本的模塊,其中導出了Image類,一個Image類實例對象就對應了一副圖像。同時,Image模塊還提供了很多有用的函數。
(1)打開一副圖像文件:
- import Image
- img = Image.open(“dip.jpg”)
這將返回一個Image類實例對象,后面的所有的操作都是在img上完成的。
(2)調整圖像大小:
- import Image
- img = Image.open("img.jpg")
- new_img = img.resize((128,128),Image.BILINEAR)
- new_img.save("new_img.jpg")
原來的圖像大小是256x256,現在,保存的new_img.jpg的大小是128x128。
就是這么簡單,需要說明的是Image.BILINEAR指定采用雙線性法對像素點插值。
(3)旋轉圖像:
現在我們把剛才調整過大小的圖像旋轉45度:
- import Image
- img = Image.open("img.jpg")
- new_img = img.resize((128,128),Image.BILINEAR)
- rot_img = new_img.rotate(45)
- rot_img.save("rot_img.jpg")
總結:
在批處理或者簡單的Python圖像處理任務中,采用Python和PIL(Python Image Library)的組合來完成圖像處理任務是一個很不錯的選擇。設想有一個需要對某個文件夾下的所有圖像將對比度提高2倍的任務。用Python來做將是十分簡單的。當然,我也不得不承認Python在圖像處理方面的功能還比較弱,顯然還不適合用來進行濾波、特征提取等等一些更為復雜的應用。我個人的觀點是,當你要實現這些“高級”的算法的時候,好吧,把它交給MATLAB去完成。但是,如果你面對的只是一個通常的不要求很復雜算法的圖像處理任務,那么,Python應該才是你的最佳搭檔。