Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python에서 RGB 색상 공간을 다른 색상 공간으로 변환하는 방법

이미지를 한 색상 공간(color space)에서 다른 색상 공간으로 변환하는 것은, 변환된 새로운 색상 공간이 이후 다양한 이미지 처리 작업에 더 적합한 입력이 되도록 하기 위해 널리 사용됩니다. 여기에는 색조(Hue), 명도(Luminosity), 채도(Saturation) 등의 요소를 분리하는 작업이 포함됩니다.

이미지가 RGB 방식으로 표현될 경우, 색조와 명도 속성은 R, G, B 세 채널의 선형 조합 형태로 나타나기 때문에 개별적인 제어가 어렵습니다.

반면 HSV 방식(여기서 H는 색조(Hue), S는 채도(Saturation), V는 명도(Value)를 의미함)을 사용하면 각 속성이 독립된 채널로 분리되어 표현되므로, 특정 속성만 선택적으로 다루기가 훨씬 수월해집니다.

아래는 Python의 scikit-image 라이브러리를 사용하여 RGB 색상 공간을 HSV 색상 공간으로 변환하는 예제입니다.

예제 코드

import matplotlib.pyplot as plt
from skimage import data
from skimage.color import rgb2hsv
path = "path to puppy_1.JPG"
img = io.imread(path)
rgb_img = img
hsv_img = rgb2hsv(rgb_img)
value_img = hsv_img[:, :, 2]
fig, (ax0, ax1) = plt.subplots(ncols=2, figsize=(8, 2))
ax0.imshow(rgb_img)
ax0.set_title("Original image")
ax0.axis('off')
ax1.imshow(value_img)
ax1.set_title("Image converted to HSV channel")
ax1.axis('off')
fig.tight_layout()

출력 결과

Python에서 RGB 색상 공간을 다른 색상 공간으로 변환하는 방법

코드 설명

  • 필요한 라이브러리(matplotlib, skimage)를 먼저 가져옵니다.
  • 변환할 이미지가 저장된 파일 경로를 정의합니다.
  • 'imread' 함수를 사용하여 해당 경로에 접근하고 이미지를 읽어 들입니다.
  • 'rgb2hsv' 함수를 사용하여 이미지를 RGB 색상 공간에서 HSV 색상 공간으로 변환합니다.
  • HSV 이미지에서 세 번째 채널(인덱스 2), 즉 V(Value, 명도) 채널만 추출합니다.
  • matplotlib 라이브러리를 활용해 원본 이미지와 HSV로 변환된 이미지를 나란히 시각화합니다.
  • 각 축의 제목을 설정하고 'axis('off')'로 눈금을 제거한 뒤, 'tight_layout()'으로 레이아웃을 정돈하여 화면에 출력합니다.

이처럼 scikit-image의 rgb2hsv 함수를 활용하면 몇 줄의 코드만으로도 손쉽게 색상 공간을 변환할 수 있으며, 이를 통해 색조·명도·채도를 개별적으로 분석하거나 조작하는 후속 이미지 처리 작업을 효율적으로 수행할 수 있습니다.