1. 실습 코드

2. 영상 파일 공유
img1 = cv2.imread('HappyFish.jpg')
img2 = img1[40:120, 30:150] # 공유
3. 영상 파일 복사본 생성
img1 = cv2.imread('HappyFish.jpg')
img3 = img1[40:120, 30:150].copy() # 복사본 생성
4. 결과
img2.fill(0) # img2 부분의 픽셀 값을 모두 0으로 채움
cv2.imshow('img1', img1)
cv2.imshow('img2', img2)
cv2.imshow('img3', img3)
cv2.waitKey()
cv2.destroyAllWindows()

1. ROI
2. Mask 영상

3. Mask 연산

3. 실습 코드

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)

cv2.copyTo(src,mask,dst)

4. 알파채널 실습 코드

dst = cv2.imread('cat.bmp', cv2.IMREAD_COLOR)
logo = cv2.imread('opencv-logo-white.png', cv2.IMREAD_UNCHANGED) # 알파채널(투명도) 포함 영상파일
mask = logo[:,:,-1] # logo 영상 파일에서 가로 세로 전체영역 중 알파채널 영역을 공유
logo = logo[:,:,0:3] # logo 영상 파일에서 가로 세로 전체영역 중 RGB채널 영역을 공유
h, w = mask.shape[:2] # mask 영상 파일의 가로 세로 크기 구하기
crop = dst[10:10+h, 10:10+w] # dst 영상 파일에서 mask와 크기가 같은 픽셀 영역을 공유하는 crop 변수 선언
cv2.copyTo(logo, mask, crop)
영상 파일은 numpy.ndarray 형식인데 만약 알파채널까지 포함해 4개의 채널을 갖는다면
[ [ [0,0,0,50], [0,0,0,50] ], [ [0,0,0,70], [0,0,0,70] ]....]
(0,0) 위치에 [r,g,b,alpha50], (0,1) 위치에 [r,g,b,alpha50], (1,0) 위치에 [r,g,b,alpha70] 픽셀값
따라서 [:, :, -1] 은 [0,0,0,50] 에서 50인 알파채널 영역이고 [:, :, 0:3] 은 [0,0,0,50]에서 0,0,0인 RGB 영역
아래 결과에서 보듯이 로고와 고양이 사진의 크기가 다르므로 코드 빨간 부분처럼 crop을 dst에서 mask 영상파일과 같은 크기의 픽셀부분을 공유하도록 함
5. 결과
