cv2.copyTo(src, mask, dst=None) -> dst
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)
# NumPy의 불리언 인덱싱(booleanindexing)을 이용한 마스크 연산
dst[mask > 0] = src[mask > 0]
import sys
import cv2
# 알파 채널을 마스크 영상으로 이용
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[:, :, 0:3] # logo는 b, g, r 3채널로 구성된 컬러 영상
h, w = mask.shape[:2]
crop = src[10:10+h, 10:10+w] # logo, mask와 같은 크기의 부분 영상 추출
# logo, mask, crop은 모두 크기가 같아야함.logo와crop는 같은 타입이어야 하고, mask는 그레이 스케일 타입의 이진영상.
cv2.copyTo(logo, mask, crop)
#crop[mask > 0] = logo[mask > 0]
Reference
1) 제로베이스 데이터스쿨 강의자료