본문 바로가기

학습컨텐츠/이미지프로세싱

픽셀 기반 처리 - (3) 이미지 합성하기


  픽셀 연산으로 두 이미지를 합성하는 것이 가능하다. 이것을 블렌딩(Blending)이라고 한다. 포토샵으로 뽀샤시한 사진을 만들려고 노력해본 사람이라면 레이어에서 <Blending Options> 메뉴에 들어가 여러 가지를 조정해 본 기억이 있을 것이다. 포토샵의 <Blending Options> 메뉴에서는 그 레이어와 아래 레이어가 어떻게 합성될지 설정할 수 있다.


(그림 18) 포토샵에서 레이어의 Blending Options 설정으로 들어간 화면


  아래 사진은 이미지 프로세싱 컨텐츠의 2부에서 배울 방법을 이용하여 고양이 사진을 흐리게 만든 것이다. 원래의 선명한 고양이 사진과 흐린 고양이 사진을 합성하면 어떤 결과가 될까?


(그림 19) 흐리게 만든 고양이 사진


  두 사진을 합성하기 위해서는 다음 식대로 픽셀을 조작하면 된다.


결과 이미지의 픽셀값 = 첫 번째 이미지의 비율 * 첫 번쨰 이미지의 픽셀값 +

                      두 번째 이미지의 비율 * 두 번째 이미지의 픽셀값


  여기서 첫 번째 이미지와 두 번째 이미지의 비율의 합은 1이 되도록 해야 한다. 그렇게 하지 않으면 전체적으로 어두워지거나 밝아지게 된다. 흐린 고양이 사진을 blurcat.bmp로 저장하고 다음 코드를 실행하면 cat.bmp와 blurcat.bmp가 30대 70으로 합성된 vaguecat.bmp이 저장된다.


import Image
cat=Image.open("cat.bmp")
blurcat=Image.open("blurcat.bmp")
vaguecat=Image.new("RGB",cat.size)
pix1=cat.load()
pix2=blurcat.load()
pix=vaguecat.load()

for i in range(cat.size[0]):
    for j in range(cat.size[1]):
        pix[i,j]=(    int(0.3*pix1[i,j][0]+0.7*pix2[i,j][0]) ,
            int(0.3*pix1[i,j][1]+0.7*pix2[i,j][1]) ,
            int(0.3*pix1[i,j][2]+0.7*pix2[i,j][2]) )

vaguecat.save("vaguecat.bmp")


vaguecat.bmp에 저장된 결과는 다음과 같다. 선명함을 유지하면서도 더 은은한 느낌의 사진을 볼 수 있다.


(그림 20) 합성 후의 고양이 사진


  이제 앞서 배운 방법대로 밝기와 명암대비를 적절히 밝고 흐릿하게 조정하면 "뽀샤시 모드" 사진이 완성된다. 원래 고양이 사진과 비교해 보자.



(그림 21) 완전소중 뽀샤시 모드 고양이


  파이썬 이미징 라이브러리는 정말 기특하게도 블렌딩을 위한 함수 blend를 제공한다. 다음과 같이 하면 vaguecat.bmp를 쉽고 빠르게 만들 수 있다.


import Image
cat=Image.open("cat.bmp")
blurcat=Image.open("blurcat.bmp")
vaguecat=Image.blend(cat,blurcat,0.7)
vaguecat.save("vaguecat.bmp")



[목차] 이미지프로세싱 - 시작
[이전] 픽셀 기반 처리 - (2) 흑백 이미지 만들기
[다음] 영역 기반 처리 - (1) 회선(Convolution) 기법