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)