python影象處理---python的影象處理模組Image-
【python影象處理】python的影象處理模組Image
版本資訊:2.7.11
環境:windows 7 64位系統
編輯器:PyCharm
執行工具:PyCharm
檔案地址:D:\phpStudy\WWW\python\Image
一、引入影象模組
1. PIL簡介:PIL(Python Imaging Library Python,影象處理類庫)提供了通用的影象處理功能,以及大量有用的基本影象操作,比如影象縮放、裁剪、旋轉、顏色轉換等。利用 PIL 中的函式,我們可以從大多數影象格式的檔案中讀取資料,然後寫入最常見的影象格式檔案中。PIL 中最重要的模組為 Image 。
2. 引入PIL:
from PIL import Image
注意:有一些教程預設是用import Image的,但是在window 的64位系統中如果沒有在cmd中執行pip install PIL是找不到Image模組的,所以呢必須先安裝Pillow,在cmd中執行pip install Pillow,這裡也要變成from PIL import Image
二、讀取與儲存操作
1. PIL 的 open() 函式用於建立 PIL 影象物件,比如讀取一張圖片:
# coding=utf-8
from PIL import Image
# 讀取圖片
img = Image.open('qq_image.jpg')
注意:在該路徑下必須有qq_image.jpg圖片,否則會出錯
2. 儲存圖片:
save() 方法用於儲存影象到具有指定檔名的檔案。通過 save() 方法,PIL 可以將影象儲存成多種格式的檔案,PIL 是個足夠智慧的類庫,可以根據副檔名來判定影象的格式。比如:img.save('qq_image_thumb.jpg', 'JPEG'),PIL 函式會進行簡單的檢查,如果檔案不是 JPEG 格式,會自動將其轉換成 JPEG 格式;如果轉換失敗,它會在控制檯輸出一條報告失敗的訊息。
為了效果,生成縮圖並且儲存為qq_image_thumb.jpg:
# coding=utf-8
from PIL import Image
# 讀取圖片
img = Image.open('qq_image.jpg')
# 生成縮圖
img.thumbnail((128, 128))
# 儲存圖片
img.save('qq_image_thumb.jpg', 'JPEG')
執行後,進去檔案目錄:
三、影象的一些基本操作
1. 輸出圖片的資訊(格式、尺寸以及影象型別)
# coding=utf-8
from PIL import Image
# 讀取圖片
img = Image.open('qq_image.jpg')
# 輸出圖片的格式,尺寸以及影象型別
print img.format, img.size, img.mode
輸出:JPEG (355, 346) RGB
2. 顯示圖片
# coding=utf-8
from PIL import Image
# 讀取圖片
img = Image.open('qq_image.jpg')
# 顯示圖片
img.show()
在PyCharm下執行呢,會直接呼叫Windows照片檢視器來顯示圖片
3. 生成縮圖
thumbnail() 方法接受一個元組引數(該引數指定生成縮圖的大小),然後將影象轉換成符合元組引數指定大小的縮圖。
# coding=utf-8
from PIL import Image
# 讀取圖片
img = Image.open('qq_image.jpg')
# 生成縮圖
img.thumbnail((128, 128))
# 顯示圖片
img.show()
這樣執行之後就會顯示128*128的圖片
4. 旋轉圖片
要旋轉一幅影象,可以使用逆時針方式表示旋轉角度,然後呼叫 rotate() 方法:
# coding=utf-8
from PIL import Image
# 讀取圖片
img = Image.open('qq_image.jpg')
# 逆時針旋轉45度
rorate1 = img.rotate(45)
rorate1.show()
# 逆時針旋轉90
rorate2 = img.transpose(Image.ROTATE_90)
rorate2.show()
執行後如圖:
rorate1:
由於尺寸不變,旋轉45度之後會填白
rorate2:
注意:只有選擇90度,180度以及270度的時候才能用img.transpose(Image.ROTATE_90),其他角度用rotate
5. 翻轉
# coding=utf-8
from PIL import Image
# 讀取圖片
img = Image.open('qq_image.jpg')
# 左右對換
rorate3 = img.transpose(Image.FLIP_LEFT_RIGHT)
rorate3.show()
# 上下翻轉
rorate4 = img.transpose(Image.FLIP_TOP_BOTTOM)
rorate4.show()
執行後:
rorate3:
rorate4:
6. 縮放圖片
要調整一幅影象的尺寸,我們可以呼叫 resize() 方法。該方法的引數是一個元組,用來指定新影象的大小:
# coding=utf-8
from PIL import Image
# 讀取圖片
img = Image.open('qq_image.jpg')
# 縮放圖片為50*50
resize1 = img.resize((50, 50))
resize1.show()
7. 圖片灰度化
影象的顏色轉換可以使用 convert() 方法來實現。要讀取一幅影象,並將其轉換成灰度影象,只需要加上 convert('L'),如下:
# coding=utf-8
from PIL import Image
# 讀取圖片
img = Image.open('qq_image.jpg')
# 圖片轉換為灰度
grey = img.convert('L')
grey.show()
執行後:
8. 某個畫素點的色彩值的獲取以及更改
# coding=utf-8
from PIL import Image
# 讀取圖片
img = Image.open('qq_image.jpg')
# 獲取某個畫素位置的值
print img.getpixel((100, 100))
# 更改某個畫素位置的值
img.putpixel((100, 100), (0, 0, 0))
9. 裁剪圖片
使用 crop() 方法可以從一幅影象中裁剪指定區域:
# coding=utf-8
from PIL import Image
# 讀取圖片
img = Image.open('qq_image.jpg')
# 裁剪圖片 box為裁剪圖片的區域範圍
box = (100, 100, 250, 250)
region = img.crop(box)
region.show()
執行輸出:
注意:Python規定左上角為(0, 0)的座標點,box由一個4元組(左,上,右,下)定義,表示為座標為: (left, upper, right, lower),最後的兩個數字必須比前面兩個要大。如圖:
10. 貼上圖片
為了效果,裁剪該圖片的一部分然後旋轉,最後貼上到指定區域:
# coding=utf-8
from PIL import Image
# 讀取圖片
img = Image.open('qq_image.jpg')
# 裁剪圖片 box為裁剪圖片的區域範圍
box = (100, 100, 250, 250)
region = img.crop(box)
region.show()
# 逆時針旋轉圖片180度
region2 = region.transpose(Image.ROTATE_180)
region2.show()
# 圖片的貼上
img.paste(region2, box)
img.show()
執行:
總結:
如果需要更強大的影象處理操作的話,可以使用Matplotlib類庫,它具有比PIL更強大的繪圖功能,比如說可以繪製出強大的條形圖、餅狀圖、散點圖等。