본문 바로가기

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

픽셀 기반 처리 - (2) 흑백 이미지 만들기


  앞서 말한 convert("L") 함수를 이용하면 손쉽게 흑백 이미지로 만들 수 있다. 이 함수는 내부적으로 아래와 같은 연산을 통해 R, G, B 세 개의 성분을 한 개의 광도(Luma) 성분으로 합성한다.


L = 0.2126 R + 0.7152 G + 0.0722 B

  이 계수들은 우리 눈이 느끼는 빨강, 파랑, 초록 삼원색의 밝기의 상대적인 차이를 바탕으로 채택한 값이다. (그림 17)에서 확인할 수 있듯이, 흑백으로 변환한 원색의 초록색(#00FF00)은 원색의 파랑색(#0000FF)보다 훨씬 밝다. 이것은 G에 곱해진 숫자 0.7152가 B에 곱해진 숫자 0.0722보다 훨씬 크기 때문이다.

(그림 17) RGB의 3원색을 흑백으로 변환한 결과


  convert("L") 기능을 이용하지 않고 직접 이미지를 흑백으로 바꾸기 위해서는 load()함수로 얻어온 PixelAccess 객체를 이용해야 한다. eval함수는 각 성분에 똑 같은 처리를 하기 때문에 원하는 계수를 적용할 수 없기 때문이다. 다음 코드는 cat.bmp파일을 열어서 graycat.bmp파일로 저장해 준다. 앞서 convert함수를 설명하면서 다루었던 예제와 같은 역할을 하는 프로그램이다.



import Image
im=Image.open("cat24.bmp")
pix=im.load()
for i in range(im.size[0]):
    for j in range(im.size[1]):
        L=0.2126*pix[i,j][0]+0.7152*pix[i,j][1]+0.0722*pix[i,j][2]
        L=int(L)
        pix[i,j]=(L,L,L)
im.save("graycat.bmp") 





[목차] 이미지프로세싱 - 시작
[이전] 픽셀 기반 처리 - (1) 밝기/명암대비 조절
[다음] 픽셀 기반 처리 - (3) 이미지 합성하기