이미지를 합성하기 전에 사진 두 개를 준비하자.
싸이 얼굴에 호랑이를 합성해보도록 하자
import cv2
psy = cv2.imread('images/psy.png')
tiger = cv2.imread('images/tiger.png')
cv2.imshow('psy',psy)
cv2.imshow('tiger',tiger)
cv2.waitKey(0)
cv2.destroyAllWindows()
이미지가 잘 출력이 된다.
tiger.shape
# y = 123
# x = 132
#(123, 132, 3)
psy.shape
# 세로, 가로, 색상 채널
#(838, 630, 3)
#좌 상단 좌표 : 280, 50 예측하자.
#우 하단 좌표 : 400, 200
# 싸이 얼굴 영역 자르기
# [열 = y, 행 = x]
sub_psy = psy[94:217, 239:371]
import cv2
psy = cv2.imread('images/psy.png')
tiger = cv2.imread('images/tiger.png')
psy[94:217, 239:371] = tiger
cv2.imshow('psy',psy)
# cv2.imshow('tiger',tiger)
cv2.waitKey(0)
cv2.destroyAllWindows()
import cv2
psy = cv2.imread('images/psy.png')
tiger = cv2.imread('images/tiger.png')
# psy[94:217, 239:371] = tiger
# 마스크 이진 이미지 만들기 (목적 = 쓸 부분과 안 쓸 부분 구분하기)
mask2gray = cv2.cvtColor(tiger, cv2.COLOR_BGR2GRAY)
_, mask_b = cv2.threshold(mask2gray, 200, 255, cv2.THRESH_BINARY)
cv2.imshow('mask_b',mask_b)
# cv2.imshow('psy',psy)
# cv2.imshow('tiger',tiger)
cv2.waitKey(0)
cv2.destroyAllWindows()
흰 부분은 쓰지 않고 까만 부분을 사용할 것이다.
import cv2
psy = cv2.imread('images/psy.png')
tiger = cv2.imread('images/tiger.png')
# psy[94:217, 239:371] = tiger
# 마스크 이진 이미지 만들기 (목적 = 쓸 부분과 안 쓸 부분 구분하기)
mask2gray = cv2.cvtColor(tiger, cv2.COLOR_BGR2GRAY)
_, mask_b = cv2.threshold(mask2gray, 200, 255, cv2.THRESH_BINARY)
# 마스크 이미지 반전
mask_b_inv = cv2.bitwise_not(mask_b)
cv2.imshow('mask_b',mask_b)
cv2.imshow('mask_b_inv', mask_b_inv)
# cv2.imshow('psy',psy)
# cv2.imshow('tiger',tiger)
cv2.waitKey(0)
cv2.destroyAllWindows()
이로써 사용할 부분을 흰색으로 반전시켰다.
import cv2
psy = cv2.imread('images/psy.png')
tiger = cv2.imread('images/tiger.png')
# psy[94:217, 239:371] = tiger
# 마스크 이진 이미지 만들기 (목적 = 쓸 부분과 안 쓸 부분 구분하기)
mask2gray = cv2.cvtColor(tiger, cv2.COLOR_BGR2GRAY)
_, mask_b = cv2.threshold(mask2gray, 200, 255, cv2.THRESH_BINARY)
# 마스크 이미지 반전
mask_b_inv = cv2.bitwise_not(mask_b)
# 호랑이 이미지에서 사용할 영역의 값만 추출하기(흰 부분)
sub_psy = psy[94:217, 239:371]
img_bg = cv2.bitwise_and(sub_psy, sub_psy, mask = mask_b_inv)
cv2.imshow('img_bg',img_bg)
# cv2.imshow('mask_b',mask_b)
# cv2.imshow('mask_b_inv', mask_b_inv)
# cv2.imshow('psy',psy)
# cv2.imshow('tiger',tiger)
cv2.waitKey(0)
cv2.destroyAllWindows()
import cv2
psy = cv2.imread('images/psy.png')
tiger = cv2.imread('images/tiger.png')
# psy[94:217, 239:371] = tiger
# 마스크 이진 이미지 만들기 (목적 = 쓸 부분과 안 쓸 부분 구분하기)
mask2gray = cv2.cvtColor(tiger, cv2.COLOR_BGR2GRAY)
_, mask_b = cv2.threshold(mask2gray, 200, 255, cv2.THRESH_BINARY)
# 마스크 이미지 반전
mask_b_inv = cv2.bitwise_not(mask_b)
# 호랑이 이미지에서 사용할 영역의 값만 추출하기(흰 부분)
sub_psy = psy[94:217, 239:371]
img_bg = cv2.bitwise_and(sub_psy, sub_psy, mask = mask_b)
cv2.imshow('img_bg',img_bg)
img_fg = cv2.bitwise_and(tiger, tiger, mask = mask_b_inv)
# cv2.imshow('img_bg', img_bg)
# cv2.imshow('img_fg', img_fg)
# cv2.imshow('psy',psy)
# cv2.imshow('tiger',tiger)
cv2.waitKey(0)
cv2.destroyAllWindows()
import cv2
psy = cv2.imread('images/psy.png')
tiger = cv2.imread('images/tiger.png')
# psy[94:217, 239:371] = tiger
# 마스크 이진 이미지 만들기 (목적 = 쓸 부분과 안 쓸 부분 구분하기)
mask2gray = cv2.cvtColor(tiger, cv2.COLOR_BGR2GRAY)
_, mask_b = cv2.threshold(mask2gray, 200, 255, cv2.THRESH_BINARY)
# 마스크 이미지 반전
mask_b_inv = cv2.bitwise_not(mask_b)
# 호랑이 이미지에서 사용할 영역의 값만 추출하기(흰 부분)
sub_psy = psy[94:217, 239:371]
img_bg = cv2.bitwise_and(sub_psy, sub_psy, mask = mask_b)
cv2.imshow('img_bg',img_bg)
img_fg = cv2.bitwise_and(tiger, tiger, mask = mask_b_inv)
#두 이미지 합치기
bg_fg = cv2.add(img_bg,img_fg)
cv2.imshow('bg_fg',bg_fg)
# cv2.imshow('img_bg', img_bg)
# cv2.imshow('img_fg', img_fg)
# cv2.imshow('psy',psy)
# cv2.imshow('tiger',tiger)
cv2.waitKey(0)
cv2.destroyAllWindows()
import cv2
psy = cv2.imread('images/psy.png')
tiger = cv2.imread('images/tiger.png')
# psy[94:217, 239:371] = tiger
# 마스크 이진 이미지 만들기 (목적 = 쓸 부분과 안 쓸 부분 구분하기)
mask2gray = cv2.cvtColor(tiger, cv2.COLOR_BGR2GRAY)
_, mask_b = cv2.threshold(mask2gray, 200, 255, cv2.THRESH_BINARY)
# 마스크 이미지 반전
mask_b_inv = cv2.bitwise_not(mask_b)
# 호랑이 이미지에서 사용할 영역의 값만 추출하기(흰 부분)
sub_psy = psy[94:217, 239:371]
img_bg = cv2.bitwise_and(sub_psy, sub_psy, mask = mask_b)
cv2.imshow('img_bg',img_bg)
img_fg = cv2.bitwise_and(tiger, tiger, mask = mask_b_inv)
#두 이미지 합치기
bg_fg = cv2.add(img_bg,img_fg)
cv2.imshow('bg_fg',bg_fg)
# 원래 이미지에 합성하기
psy[94:217, 239:371] = bg_fg
cv2.imshow('psy',psy)
# cv2.imshow('img_bg', img_bg)
# cv2.imshow('img_fg', img_fg)
# cv2.imshow('psy',psy)
# cv2.imshow('tiger',tiger)
cv2.waitKey(0)
cv2.destroyAllWindows()