一個 Pillow 實現的影象填充函式

SpikeKing發表於2018-08-09

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()
複製程式碼

原圖:

Small

修改:

Paste

OK, that's all! Enjoy it!

更多演算法技巧,關注微信公眾號:深度演算法(ID: DeepAlgorithm)

相關文章