あいどる💖たいむ

あいどるやってます。

OpenCVでのリサイズと切り取り

画像を正方形にリサイズする。
画像の短辺を正方形の辺の長さ®ã«åˆã‚ã›ã¦ä¸­å¤®ã«é…ç½®ã—、長辺のはみでた部分は切り捨てる。

コード

import cv2

def resize_and_crop_square(img, r):
    """
    画像を正方形に切り取る
    短辺をrに合わせるようリサイズし、長辺のはみ出す部分は切り捨てる
    :param img:
    :param r: 正方形の辺の長さ
    :return: resized image
    """
    org_h, org_w = img.shape[:2]

    if org_h > org_w:
        h = int(org_h * r / org_w)
        w = r
    else:
        h = r
        w = int(org_w * r / org_h)

    # resize
    w = max(w, r)
    h = max(h, r)
    img2 = cv2.resize(img, (w, h))

    # crop
    top = (h - r) // 2
    left = (w - r) // 2
    return img2[top:top + r, left:left + r]

_img = cv2.imread('images/pexels-photo-297743.jpeg', cv2.IMREAD_COLOR)
_img2 = resize_and_crop_square(_img, 256)
cv2.imshow('res', _img2)
cv2.waitKey(0)

実行結果

左が元画像、右が編集後の画像

f:id:shiccocsan:20170622193937j:plain