본문 바로가기

OpenCV/Python

이미지 비트연산을 활용한 이미지 합성

import cv2 as cv
import numpy as np

logo = cv.imread("opencv.png", cv.IMREAD_COLOR)
background = cv.imread("1.jpg", cv.IMREAD_COLOR)

logo_gray = cv.cvtColor(logo, cv.COLOR_BGR2GRAY)
ret, logo_mask = cv.threshold(logo_gray, 240, 255, cv.THRESH_BINARY)

logo_mask_inv = cv.bitwise_not(logo_mask)


# 넣고 싶은 위치에 합성할 이미지의 크기만큼 배경 이미지를 잘라냄
height, width = logo_gray.shape[:2]
background_cut = background[0:height, 0:width]

# 배경 이미지에는 로고 들어갈 위치 삭제
# 로고에는 로고만 냄기고 배경 삭제
img1 = cv.bitwise_and(logo, logo, mask=logo_mask_inv)
img2 = cv.bitwise_and(background_cut, background_cut, mask=logo_mask)

tmp = cv.add(img1, img2)
background[0:height, 0:width] = tmp

cv.imshow("A", background)

cv.waitKey(0)

 

 

1. 사진 준비

1) 합성할 사진

 

2) 배경

 

-> 배경이 당연히 더 커야겠쥬?

 

 

2. 로고, 합성할 이미지를 배경만 잘라서 따기

1) 그레이 변환 후, 적절한 값을 골라서 배경과 로고 구분

2) 로고나 합성한 이미지의 배경을 자르기 위해서 inverse도 구해둔다

 

 

3. 배경에서 로고 넣고 싶은 위치를 정한 후, 그 부분을 가져온다

 

 

 

4. 불필요한 부분 삭제

1) 합성할 이미지의 배경 잘라냄

 

2) 배경을 이미지의 크기만큼 잘라냄

 

5. 이미지 최종 합치기

 

 

 

 

'OpenCV > Python' 카테고리의 다른 글

ROI -2 응용하기  (0) 2021.06.11
ROI -1 관심영역 설정  (0) 2021.06.11
물체 감싸기  (0) 2021.06.11
그리기에 관한 것!!!!  (0) 2021.06.11
그래픽 인터페이스 (GUI)  (0) 2021.06.09