PIL 是 Python 的內置庫,我們直接 import
引入即可使用
from PIL import Image
1. 讀取圖片
# 打開圖片文件
img = Image.open('baidu.jpg')
img.show()
2. 裁剪圖片
找到圖片的像素有很多種方式,我們以 PS 爲例,打開圖片直接按快捷鍵 F8 , 或者手動打開菜單的 “窗口” - “信息”,然後在屬性中可以選擇像素、英寸、釐米、毫米……
crop
參數分別代表 左、上、右、下 的像素座標
# cropped = img.crop((1500, 1350, 2700, 1750))
cropped = img.crop((650, 480, 1100, 640))
cropped.show()
3. 灰度處理
以 L
模式處理後後的圖片黑白圖片,也叫做灰度化處理
# 灰度處理 - 黑白圖片
grayscale = cropped.convert('L')
grayscale.show()
4. 二值化處理
所謂二值化就是圖片非黑即白,是爲了增強對比度,能更好的突出圖片中的重點
# 自定義灰度界限,大於這個值爲黑色,小於這個值爲白色
threshold = 60
table = []
for i in range(256):
if i < threshold:
table.append(0)
else:
table.append(1)
# 圖片二值化
photo = grayscale.point(table, '1')
photo.show()
5. 增強對比度
和二值化類似,不過對比度可以選擇對比強弱,二值只有黑白
from PIL import ImageEnhance
enhance = ImageEnhance.Contrast(cropped)
enhance_value = 100
contrast = enhance.enhance(enhance_value)
contrast.show()
6. 保存圖片到磁盤
img.save("baidu.bak.jpg")
7. 保存圖片到內存
有時候我們想直接使用處理後的圖片進行 ORC 識別,但是這時的圖片是 Image
對象,ORC 識別 或者打碼平臺提供直接上傳二進制流,那麼怎麼能讓 Image
對象轉換爲二進制流呢?
很可以我沒有找對對應的方法,我們可以變通一下,將 Image
對象保存在內存中,因爲保存的時候不管是磁盤還是內存都是二進制的
# 將 Image 對象以二進制流的方式存儲在內存中
output_buffer = BytesIO()
photo.save(output_buffer, format='JPEG')
# 讀取內存中的二進制流
byte_data = output_buffer.getvalue()
print(byte_data)
注意:代碼中的 img.show()
是將圖片彈出預覽,可供編碼調試,在實際生產環境中可註釋掉