Python3 處理圖片庫 PIL

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() 是將圖片彈出預覽,可供編碼調試,在實際生產環境中可註釋掉

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章