반응형

Image Crop

Crop은 이미지에서 필요한 이미지의 일부만 잘라내기 위해 사용합니다. 예를들어, 이미지에서 얼굴 영역만 찾아 잘라내는 기능을 개발한다면 Crop을 통해 잘라낼 수 있습니다.


Import packages

import cv2
import imutils
import matplotlib.pyplot as plt

Jupyter Notebook 및 Google Colab에서 이미지를 표시할 수 있도록 Function으로 정의

def img_show(title='image', img=None, figsize=(8 ,5)):
    plt.figure(figsize=figsize)

    if type(img) == list:
        if type(title) == list:
            titles = title
        else:
            titles = []

            for i in range(len(img)):
                titles.append(title)

        for i in range(len(img)):
            if len(img[i].shape) <= 2:
                rgbImg = cv2.cvtColor(img[i], cv2.COLOR_GRAY2RGB)
            else:
                rgbImg = cv2.cvtColor(img[i], cv2.COLOR_BGR2RGB)

            plt.subplot(1, len(img), i + 1), plt.imshow(rgbImg)
            plt.title(titles[i])
            plt.xticks([]), plt.yticks([])

        plt.show()
    else:
        if len(img.shape) < 3:
            rgbImg = cv2.cvtColor(img, cv2.COLOR_GRAY2RGB)
        else:
            rgbImg = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

        plt.imshow(rgbImg)
        plt.title(title)
        plt.xticks([]), plt.yticks([])
        plt.show()

Load Image

cv2_image = cv2.imread('asset/images/test_image.jpg', cv2.IMREAD_COLOR)

Crop

OpenCV를 통해 불러온 이미지는 Numpy Array 입니다.  Numpy Array slicing 을 이용하여 이미지를 자를 수 있습니다.

http://scipy-lectures.org/

cv2_image[0, 3:5]

Output:

array([[220, 223, 221],
       [224, 233, 237]], dtype=uint8)

이미지에서 원하는 영역을 자르기 위해서는 [ startY:endY, startX:endX ] 형태로 Array slicing 합니다.

# Y1:Y2, X1:X2
face = cv2_image[500:800, 400:750]

img_show(["face"], [face])

반응형