Image Processing/Cv2

Cv2 를 이용해서 multiple 이미지 crop하고 나머지 mask 하기

jinmc 2021. 3. 3. 18:00
반응형

저번시간의 심화 입니다.

만약 crop하고 싶은 roi가 한 개가 아니면 어떡할까요? 

 

import numpy as np
import cv2

image = cv2.imread('download.jpg')
mask = np.zeros((image.shape[0], image.shape[1]))

# roi 정리 시작
roi = "0,0,300,0,300,300,0,300_300,300,600,300,600,600,300,600"
roi_list = roi.split("_")
print(roi_list)
croplist = []
for r in roi_list:
    crop = []
    cl = r.split(",")
    for i in range(0, len(cl), 2):
        crop.append([int(cl[i]), int(cl[i+1])])
    croplist.append(crop)
# roi 정리 끝

mask = np.zeros((image.shape[0], image.shape[1]))

for cr in croplist:
    pts = np.array([cr])
    cv2.fillConvexPoly(mask, pts, 1)
mask = mask.astype(np.bool)

out = np.zeros_like(image)
out[mask] = image[mask]
image = out

cv2.imshow('Image', out)

cv2.waitKey(0)
cv2.destroyAllWindows()

for loop로 mask안에 pts를 적립시켜주면 됩니다!

결과물은 다음과 같습니다

 

반응형