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의 색상 변환 기능을 활용하여 색상 기반 필터링, 물체 검출 및 이미지 보정과 같은 다양한 응용을 시도해 보시기 바랍니다.
'Python OpenCV' 카테고리의 다른 글
OpenCV 이미지 밝기 및 명암 조절 (cv2.addWeighted()) (0) | 2025.02.28 |
---|---|
OpenCV 이미지 크기 조절, 회전 및 이동 (cv2.resize(), cv2.rotate(), cv2.warpAffine()) (0) | 2025.02.27 |
OpenCV로 동영상 불러오기 및 재생 (cv2.VideoCapture()) (0) | 2025.02.25 |
OpenCV로 이미지 불러오기 및 저장하기 (cv2.imread(), cv2.imwrite()) (0) | 2025.02.24 |
OpenCV 설치 및 기본 사용법 (0) | 2025.02.23 |