Python OpenCV

OpenCV 이미지 색상 변환 (cv2.cvtColor())

PyExplorer 2025. 2. 26. 13:55

OpenCV 이미지 색상 변환 (cv2.cvtColor())

1. 개요

이미지 처리에서 색상 변환(Color Conversion)은 중요한 역할을 합니다. OpenCV에서는 cv2.cvtColor() 함수를 사용하여 다양한 색상 공간(Color Space) 변환을 수행할 수 있습니다. 이 글에서는 cv2.cvtColor()를 활용하여 이미지의 색상 공간을 변경하는 방법과 대표적인 색상 변환 종류를 살펴보겠습니다.

2. cv2.cvtColor() 함수 개요

OpenCV의 cv2.cvtColor() 함수는 이미지의 색상 공간을 변환하는 데 사용됩니다. 이 함수는 다양한 색상 변환 코드를 제공하며, 대표적인 변환에는 RGB <-> Grayscale, RGB <-> HSV, RGB <-> LAB 등이 포함됩니다.

2.1 함수 사용법

cv2.cvtColor(src, code)
  • src: 변환할 원본 이미지 (numpy 배열)
  • code: 변환할 색상 공간 코드 (예: cv2.COLOR_BGR2GRAY)

3. 주요 색상 변환

3.1 RGB <-> Grayscale 변환

RGB 이미지를 흑백(Grayscale) 이미지로 변환하면 색 정보가 제거되고 밝기 정보만 남게 됩니다. OpenCV에서는 cv2.COLOR_BGR2GRAY를 사용하여 변환할 수 있습니다.

예제 코드

import cv2

# 이미지 불러오기
image = cv2.imread('image.jpg')

# RGB -> Grayscale 변환
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 결과 출력
cv2.imshow('Grayscale Image', gray_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

3.2 RGB <-> HSV 변환

HSV 색상 공간은 색상(Hue), 채도(Saturation), 명도(Value)로 구성됩니다. 이미지에서 색상을 강조하거나 필터링할 때 유용하게 사용할 수 있습니다.

예제 코드

# RGB -> HSV 변환
hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)

# HSV -> RGB 변환
rgb_image = cv2.cvtColor(hsv_image, cv2.COLOR_HSV2BGR)

3.3 RGB <-> LAB 변환

LAB 색상 공간은 인간의 시각에 근접한 색 표현을 제공하여 색 보정을 수행할 때 사용됩니다.

예제 코드

# RGB -> LAB 변환
lab_image = cv2.cvtColor(image, cv2.COLOR_BGR2LAB)

# LAB -> RGB 변환
rgb_image = cv2.cvtColor(lab_image, cv2.COLOR_LAB2BGR)

3.4 RGB <-> YCrCb 변환

YCrCb 색상 공간은 밝기(Y)와 색차(Cr, Cb)를 분리하여 영상 압축이나 피부색 검출 등에 사용됩니다.

예제 코드

# RGB -> YCrCb 변환
ycrcb_image = cv2.cvtColor(image, cv2.COLOR_BGR2YCrCb)

# YCrCb -> RGB 변환
rgb_image = cv2.cvtColor(ycrcb_image, cv2.COLOR_YCrCb2BGR)

4. 색상 변환 활용 예제

4.1 특정 색상만 추출하기 (HSV 활용)

HSV 색상 공간을 활용하여 특정 색상의 객체를 감지하는 방법을 알아보겠습니다. 예를 들어, 파란색만 추출하는 코드입니다.

예제 코드

import numpy as np

# HSV 변환
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)

# 파란색 범위 지정
lower_blue = np.array([100, 150, 50])
upper_blue = np.array([140, 255, 255])

# 마스크 생성
mask = cv2.inRange(hsv, lower_blue, upper_blue)

# 원본 이미지에서 파란색 부분만 추출
result = cv2.bitwise_and(image, image, mask=mask)

# 결과 출력
cv2.imshow('Blue Color Detection', result)
cv2.waitKey(0)
cv2.destroyAllWindows()

5. 색상 변환 비교

아래는 동일한 이미지를 다양한 색상 공간으로 변환한 결과를 비교한 것입니다.

import matplotlib.pyplot as plt

# 다양한 색상 공간 변환
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
lab = cv2.cvtColor(image, cv2.COLOR_BGR2LAB)
ycrcb = cv2.cvtColor(image, cv2.COLOR_BGR2YCrCb)

# 결과 시각화
fig, axs = plt.subplots(2, 3, figsize=(12, 6))
axs[0, 0].imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
axs[0, 0].set_title('Original')
axs[0, 1].imshow(gray, cmap='gray')
axs[0, 1].set_title('Grayscale')
axs[0, 2].imshow(cv2.cvtColor(hsv, cv2.COLOR_HSV2RGB))
axs[0, 2].set_title('HSV')
axs[1, 0].imshow(cv2.cvtColor(lab, cv2.COLOR_LAB2RGB))
axs[1, 0].set_title('LAB')
axs[1, 1].imshow(cv2.cvtColor(ycrcb, cv2.COLOR_YCrCb2RGB))
axs[1, 1].set_title('YCrCb')

for ax in axs.flat:
    ax.axis('off')

plt.tight_layout()
plt.show()

6. 결론

이번 포스팅에서는 cv2.cvtColor()를 이용한 이미지 색상 변환 방법을 다루었습니다. 다양한 색상 공간을 활용하면 이미지 처리 작업을 보다 효과적으로 수행할 수 있습니다. OpenCV의 색상 변환 기능을 활용하여 색상 기반 필터링, 물체 검출 및 이미지 보정과 같은 다양한 응용을 시도해 보시기 바랍니다.