반응형
이미지 프로세싱을 하다보면 cropping을 할 때가 종종 있습니다.
cropping이란, 잘라내는 걸 뜻합니다.
그럼 큰 사이즈의 이미지가 작은 사이즈가 되는, 잘라지기가 시행됩니다.
import numpy as np
import cv2
image = cv2.imread('download.jpg')
y=0
x=0
h=500
w=500
crop = image[y:y+h, x:x+w]
cv2.imshow('Image', crop)
cv2.waitKey(0)
~
하지만 이걸 사이즈를 그대로 유지한 채, 그 부분의 이미지만 보이고,
나머지 부분은 mask, 즉, 검은색으로 칠하는 건 어떻게 할 수 있을까요?
이런 식의 cropping은 특정한 부위에서만 이미지 프로세싱이 필요할 때 필요합니다
import numpy as np
import cv2
image = cv2.imread('download.jpg')
# roi 좌표 정리 시작
roi = "0,0,300,0,300,300,0,300"
cl = roi.split(",")
clist = []
for i in range(0, len(cl), 2):
clist.append([int(cl[i]), int(cl[i+1])])
# 여기까지 roi 좌표 정리
mask = np.zeros((image.shape[0], image.shape[1])) # 검은색 그림판 제공
pts = np.array(clist) # roi 를 numpy list로 변환
cv2.fillConvexPoly(mask, pts, 1) # 검은색 도화지에 흰색으로 칠함
mask = mask.astype(np.bool) # 0 과 1을 true 랑 false로 바꿈
out = np.zeros_like(image) # image 와 같은 size의 0으로 가득한 array를 만듬
out[mask] = image[mask] # mask의 true 인 곳만 나오게 함!
주석으로 코드 설명을 다 해놨네요.
결과물은,
이런 것이,
이렇게 됨을 볼 수 있습니다.
반응형
'Image Processing > Cv2' 카테고리의 다른 글
opencv waitkey 설명 (0) | 2021.07.16 |
---|---|
opencv 를 이용해서 rtsp 동영상 받기(ft. multithreading) (0) | 2021.06.18 |
(opencv) 두 이미지의 차이를 박스로 나타내기 (0) | 2021.03.10 |
OpenCV를 이용해서 두 개의 이미지 비교하기 (SSIM) (0) | 2021.03.10 |
Cv2 를 이용해서 multiple 이미지 crop하고 나머지 mask 하기 (0) | 2021.03.03 |