logo

색상 채널과 비트 깊이

실습 준비

from PIL import Image

img = Image.open("balloon.webp")
img

색상과 채널

컬러 비트맵의 각 픽셀은 여러 채널(channel)의 값으로 구성. 화면에서는 빛의 삼원색인 빨강(R), 초록(G), 파랑(B)을 조합한 RGB 방식이 일반적.

컬러 이미지가 빨강·초록·파랑 채널의 수치 배열로 구성되는 모습

빛의 RGB 혼합과 인쇄의 CMYK 혼합 비교

모드구성용도
11비트 흑백흑백 문서와 이진 마스크
L8비트 밝기 1채널그레이스케일 이미지
RGB8비트 RGB 3채널화면 표시와 일반 컬러 이미지
RGBA8비트 RGB와 알파 4채널투명도가 있는 컬러 이미지
CMYK8비트 CMYK 4채널인쇄
P8비트 색상표 인덱스팔레트 기반 PNG와 GIF

Pillow의 convert()로 색상 모드를 변환.

그레이스케일로 변환:

gray = img.convert("L")
gray.mode
실행 결과
'L'

RGBA로 변환:

rgba = img.convert("RGBA")
rgba.mode
실행 결과
'RGBA'

비트 깊이와 픽셀 값

비트 깊이(bit depth)는 한 채널의 값을 표현하는 비트 수.

  • 8비트 채널: 단계
  • uint8의 값 범위: 0–255
  • L: 0은 검정, 255는 흰색
  • RGB: 픽셀마다 8비트 채널 3개를 사용하므로 일반적으로 24비트
  • RGBA: RGB와 8비트 알파 채널을 사용하므로 일반적으로 32비트

예를 들어 RGB 픽셀 (255, 0, 0)은 빨강, (255, 255, 255)는 흰색.

알파 채널과 투명도

RGBA의 A는 투명도를 나타내는 알파(alpha) 채널.

  • 0: 완전히 투명
  • 255: 완전히 불투명
  • 중간값: 반투명
semi_transparent = img.convert("RGBA")
semi_transparent.putalpha(128)
semi_transparent.save("balloon_alpha.png")
semi_transparent

putalpha(128)은 모든 픽셀의 알파를 128로 지정. 8비트 알파 범위의 중간값이므로 이미지 전체가 약 50% 불투명.

JPEG는 알파 채널 저장 불가. 투명도가 필요하면 PNG나 알파 채널을 지원하는 WebP 형식을 사용.

Previous
이미지 메타데이터