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

SpikeKing發表於2019-02-27

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)

相關文章