Computer Vision & AI/OpenCV

[OpenCV, C++] alpha 채널이 있는 이미지 합성(블랜딩) 오류 해결

_heyna 2022. 6. 14. 11:34

기본적인 오류들은 채널 수, 타입, 사이즈 확인정도면 디버깅이 가능하다. 

(대부분의 오류는 Mat연산시에 위의 내용들이 맞지 않아서 발생했다.)

 

 

지금 생겼던 오류는 배경에 로고를 합성할 때 나타났는데, 

logo 이미지에 alpha채널까지 4채널이라 소스 이미지에 바로 연산을 할 수 없었다(소스=3채널)

 

그래서 cvtColor함수로 BGRA2BGR 변환을 했는데

로고가 이상하게 변형되었다.......

원인은!

로고를 만들때에 있었다.

B,G,R 채널의 배경이 검은색(0값)이 아니라 다른 색이 있었고 그 위에 알파채널을 씌웠기 때문에 배경이 투명하게 보였었는데, 3채널로 변환하니 알파채널이 제대로 적용되지 않았던 것.

 

그래서 이상한 로고에 마스킹을 한번 더 해서 해결하였다.

 

또 주의사항은 copyTo로 마스킹 할 때 src, dst 가 같은 Mat이면 제대로 되지 않았기 때문에 temp Mat을 만들어야 했다.