OpenCV/OpenCV 강좌

OpenCV Python 알파 블렌딩 : 이미지 투명하게 만들어 합치기

webnautes 2023. 10. 20. 06:50
반응형

OpenCV Python 알파 블렌딩을 사용하는 예제입니다. 



2023. 7. 16 최초작성



코드 설명이 필요하시면 영상을 참고하세요.

https://youtu.be/AtvANSfY734




사용한 이미지입니다.

 

밤풍경

https://pixabay.com/ko/photos/%ED%95%98-%EC%88%98-%ED%95%98%EB%8A%98-%EB%B3%84-%EC%BD%94%EC%8A%A4%EB%AA%A8%EC%8A%A4-4526277/ 

 

기타치는 고양이

https://pixabay.com/ko/illustrations/고양이-기타-음악-명음-7631143/ 





밤풍경 이미지와 빈 이미지에 노란색 원을 그린 것을 합성하려고 합니다.  본 포스트에서는 addWeighted함수를 사용하기 때문에 

 두 이미지의 크기가 동일해야 합니다.

 

노란색 원의 투명도를 조정하여 두 이미지를 합성한 결과입니다. 



사용한 코드입니다. 

https://bit.ly/webnautes-230716-1 

 

import cv2
import numpy as np


img1 = cv2.imread('milky-way-4526277_1280.jpg')


h, w, c = img1.shape


img2 = np.zeros((h, w, 3), dtype=np.uint8)
cv2.circle(img2, (int(w/2), int(h/3)), 100, (0, 255, 255), -1)


if c == 3:
    img1 = cv2.cvtColor(img1, cv2.COLOR_BGR2BGRA)
    img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2BGRA)


desired_alpha = 45
alpha = desired_alpha / 255.0


result = cv2.addWeighted(img1, 1, img2, alpha, 0)
source = cv2.hconcat([img1, img2])


cv2.imshow('Source', source)
cv2.imshow('Result', result)

cv2.waitKey(0)

cv2.destroyAllWindows()




이번엔 다음 링크에 있는 배경이 투명한 이미지를 추가로 사용해봅니다.  

https://pixabay.com/ko/illustrations/고양이-기타-음악-명음-7631143/ 

 



원본 이미지 입니다.

 



합성한 결과입니다. 

 

전체 코드입니다. https://bit.ly/230716-2 

 

import cv2
import numpy as np


img1 = cv2.imread('milky-way-4526277_1280.jpg')
img2 = cv2.imread('cat-7631143_640.png', cv2.IMREAD_UNCHANGED )


h, w, c = img2.shape


roi_img1 = img1[100:100+h, 100:100+w]
h, w, c = img1.shape

if c == 3:
    roi_img1 = cv2.cvtColor(roi_img1, cv2.COLOR_BGR2BGRA)



desired_alpha = 90
alpha = desired_alpha / 255.0


result = cv2.addWeighted(roi_img1, 1, img2, alpha, 0)

source = cv2.hconcat([roi_img1, img2])

cv2.imshow('Source', source)
cv2.imshow('Result', result)

cv2.waitKey(0)

cv2.destroyAllWindows()


반응형