Pillow,即PIL,Python Imaging Library,中文是“枕頭”。Pillow是Python平臺中影像處理的標準庫,功能非常強大,API簡單易用。
本文分享一個Pillow實現的影像填充函式pad_image,用於預處理影像資料集。在目標檢測演算法中,需要把輸入影像,轉換為,模型所需尺寸的影像,同時,保持比例不變,其餘部分用灰色填充。
函式的具體實現,如下:
- 計算影像縮放之後的寬高,等比例縮小或擴大;
- 呼叫resize(),改變影像的尺寸;
- 新建new()目標尺寸target_size的影像;
- 呼叫paste()貼圖,將縮放後的原始影像,放入目標影像中。
實現如下:
def pad_image(image, target_size):
iw, ih = image.size # 原始影像的尺寸
w, h = target_size # 目標影像的尺寸
scale = min(float(w) / float(iw), float(h) / float(ih)) # 轉換的最小比例
# 保證長或寬,至少一個符合目標影像的尺寸
nw = int(iw * scale)
nh = int(ih * scale)
image = image.resize((nw, nh), Image.BICUBIC) # 縮小影像
# image.show()
new_image = Image.new(`RGB`, target_size, (128, 128, 128)) # 生成灰色影像
# // 為整數除法,計算影像的位置
new_image.paste(image, ((w - nw) // 2, (h - nh) // 2)) # 將影像填充為中間影像,兩側為灰色的樣式
# new_image.show()
return new_image
複製程式碼
測試:
def main():
img_path = `xxxx.jpg`
image = Image.open(img_path)
size = (416, 416)
pad_image(image, size) # 填充影像
if __name__ == `__main__`:
main()
複製程式碼
原圖:
修改:
OK, that`s all! Enjoy it!
更多演算法技巧,關注微信公眾號:深度演算法(ID: DeepAlgorithm)