거의 알고리즘 일기장

4. OpenCv_ 마스크 연산과 ROI 본문

OpenCV

4. OpenCv_ 마스크 연산과 ROI

건우권 2020. 9. 21. 17:07

ROI : Region Of Interest, 관심 영역, 영상에서 특정 연산을 수행하고자 하는 임의의 부분 영역

 

import sys
import cv2

# # 마스크 영상을 이용한 영상 합성
# src = cv2.imread('airplane.bmp', cv2.IMREAD_COLOR)
# mask = cv2.imread('mask_plane.bmp', cv2.IMREAD_GRAYSCALE)
# dst = cv2.imread('field.bmp', cv2.IMREAD_COLOR)

# # 방어코드
# if src is None or mask is None or dst is None:
#     print('Image load failed!')
#     sys.exit()

# #사이즈가 같아야하고 src, dst는 타입도 같아야한다! mask는 그레이스케일
# cv2.copyTo(src, mask, dst)
# # boolean 인덱싱
# # dst[mask > 0] = src[mask > 0]

# cv2.imshow('src', src)
# cv2.imshow('dst', dst)
# cv2.imshow('mask', mask)
# cv2.waitKey()
# cv2.destroyAllWindows()

# 알파 채널을 마스크 영상으로 이용
src = cv2.imread('cat.bmp', cv2.IMREAD_COLOR)
logo = cv2.imread('opencv-logo-white.png', cv2.IMREAD_UNCHANGED)

# 방어 코드
if src is None or logo is None:
    print('Image load failed!')
    sys.exit()

mask = logo[:, :, 3]    # mask는 알파 채널로 만든 마스크 영상
logo = logo[:, :, :-1]  # logo는 b, g, r 3채널로 구성된 컬러 영상
h, w = mask.shape[:2]
crop = src[10:10+h, 10:10+w]  # logo, mask와 같은 크기의 부분 영상 추출

cv2.copyTo(logo, mask, crop)
#crop[mask > 0] = logo[mask > 0]

cv2.imshow('src', src)
cv2.imshow('logo', logo)
cv2.imshow('mask', mask)
cv2.waitKey()
cv2.destroyAllWindows()
반응형
Comments