이번에는 여러 장의 이미지를 가지고 각각의 이미지에서 채널을 분리하여 이 채널(모드)들을 서로 교차시켜 보겠습니다. 간혹 크리피한 이미지들, 가령 귀신 그림마냥 하나의 이미지에 다른 이미지가 살며시 얹혀 있는 그림이 있는데, 이렇게도 구현할 수 있는 방법 중 하나입니다. 말보다는 코드를 통해 보겠습니다. 다소 차이는 있겠으나, 구현 방법은 비슷합니다.
원본 이미지 - 고양이들 찬조출현.▼
원본이미지(고양이들)를 열어 cat 이라는 변수에 저장합니다. ▼
cat 에서 r,g,b 각각의 채널(모드)로 분리를 합니다. ▼
분리한 채널(모드)를 merge(병합) 을 이용하여 새로운 이미지로 만들어 new_img 변수에 저장합니다. ▼
이렇게 새로 만든 이미지를 확인하겠습니다. 원본 이미지의 고양이들과 차이가 전~혀 없습니다. 왜냐하면 원본에서 RGB 분리후 고스란히 다시 합쳐준 것이기에 차이가 있을래야 있을 수가 없습니다. ▼
그럼 상기 과정을 왜 하였느냐? 라는 의문을 가질 수 있습니다. 코드를 잘 보시면 Image.merge("RGB", (r,g,b)) 이 부분에서 r,g,b 의 순서를 뒤 바꾸어 주면 이미지가 렌더링 되는게 달라집니다. 아래 코드를 보시면 이해가 가실 것입니다.
r,g,b -> b,g,r 로 바꾼 코드▼
RGB의 구현 순서를 바꾸니 색감이 전혀 다른 이미지가 나타납니다. ▼
그렇다면 이번에는 서로 다른 원본 이미지들을 교차시켜 보겠습니다. 하나의 이미지는 상기의 고양이 이미지입니다. 또 다른 이미지는 아래의 이미지입니다. 아래 이미지는 이미 서로 다른 두 이미지가 병합이 되어 있는 상태입니다. ▼
고양이(cat), 여성(woman) 이미지를 채널(모드)별로 분리 후, 서로 교차되게 RGB를 병합해 보겠습니다. ▼
자세히 보면 두 이미지가 병합은 되었는데, 전혀 다른 색감을 가지게 되었습니다. ▼
이번에는 RGB 병합 순서와 선택된 RGB를 바꾸어 보겠습니다. ▼
또 다른 색감의 이미지가 출력이 됩니다. ▼
실제 우리가 사용하는 프로그램이나 애플리케이션들은 위의 과정에서 0~100% 적용을 하여 이미지 병합이 이루어 집니다. 위처럼 100%의 단일 채널끼리 병합하지는 않아 조금 더 자연스럽게 보여질 뿐입니다. 물론 파이썬으로도 구현이 가능합니다. 그러나 여기에서는 다루지 않을 예정입니다.
글이 마음에 드셨나요?
로그인 없이 누구나 가능한
♥ 공감은 힘이 됩니다!