Tech & Development/Image Processing

[OpenCV] Basic 10 - 이미지 색상 변환 (Color Conversion)

Theo (테오) 2024. 11. 16. 00:36
반응형

이미지 색상 변환은 이미지를 다양한 색상 공간으로 변환하여 처리할 수 있도록 하는 작업입니다. OpenCV에서는 여러 색상 공간(BGR, RGB, Grayscale, HSV, Lab 등)을 지원하며, 상황에 따라 적절한 색상 공간을 선택해 이미지 분석이나 필터링 작업을 수행할 수 있습니다. 특히 색상 공간 변환은 색상 추출, 객체 탐지, 이미지 분할 등에 유용합니다.

Import packages

import cv2
import matplotlib.pyplot as plt

Function to Display Images in Jupyter Notebook

Jupyter Notebook 및 Google Colab에서 이미지를 표시할 수 있도록 Function으로 정의합니다.

def img_show(title='image', img=None, figsize=(8, 5)):
    plt.figure(figsize=figsize)

    if type(img) == list:
        titles = title if type(title) == list else [title] * len(img)

        for i in range(len(img)):
            rgbImg = cv2.cvtColor(img[i], cv2.COLOR_GRAY2RGB) if len(img[i].shape) <= 2 else cv2.cvtColor(img[i], cv2.COLOR_BGR2RGB)
            plt.subplot(1, len(img), i + 1)
            plt.imshow(rgbImg)
            plt.title(titles[i])
            plt.xticks([]), plt.yticks([])

        plt.show()
    else:
        rgbImg = cv2.cvtColor(img, cv2.COLOR_GRAY2RGB) if len(img.shape) < 3 else cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
        plt.imshow(rgbImg)
        plt.title(title)
        plt.xticks([]), plt.yticks([])
        plt.show()

Load Image

이미지를 불러옵니다.

cv2_image = cv2.imread('asset/images/test_image.jpg', cv2.IMREAD_COLOR)

1. Grayscale 변환

Grayscale(그레이스케일)은 색상 정보를 제거하여 밝기 정보만 남긴 흑백 이미지로 변환합니다. 이미지의 채널 수가 1로 줄어들어 처리 속도가 빨라지고 메모리 사용량이 줄어듭니다.

gray_image = cv2.cvtColor(cv2_image, cv2.COLOR_BGR2GRAY)
img_show("Grayscale Image", gray_image)

2. HSV 변환

HSV는 색상(Hue), 채도(Saturation), 명도(Value)로 구성된 색상 공간입니다. 특히 특정 색상 추출이나 조명이 다양한 환경에서 유용하게 사용됩니다.

hsv_image = cv2.cvtColor(cv2_image, cv2.COLOR_BGR2HSV)
img_show("HSV Image", hsv_image)

3. RGB 변환

OpenCV에서 이미지를 불러오면 기본적으로 BGR 색상 순서를 따릅니다. 이를 RGB로 변환하면 일반적인 색상 순서로 표시할 수 있습니다.

rgb_image = cv2.cvtColor(cv2_image, cv2.COLOR_BGR2RGB)
img_show("RGB Image", rgb_image)

4. LAB 변환

LAB 색상 공간은 인간의 시각적 감각에 기반한 색상 표현 방식입니다. 조명 변화에 강해, 조명이 일정하지 않은 환경에서 색상을 비교할 때 유용하게 사용할 수 있습니다.

lab_image = cv2.cvtColor(cv2_image, cv2.COLOR_BGR2Lab)
img_show("LAB Image", lab_image)

5. YCrCb 변환

YCrCb는 밝기(Y)와 색차(Cr, Cb)로 구성된 색상 공간으로, 밝기와 색상을 분리하여 색상 조절을 할 수 있는 장점이 있습니다. 영상 압축 코덱에서도 많이 사용됩니다.

ycrcb_image = cv2.cvtColor(cv2_image, cv2.COLOR_BGR2YCrCb)
img_show("YCrCb Image", ycrcb_image)

6. Threshold와 함께 사용

색상 변환을 활용해 특정 색상 범위를 추출할 수도 있습니다. 예를 들어, HSV 색상 공간에서 특정 색상의 마스크를 추출하여 이미지의 특정 영역만 강조할 수 있습니다.

lower_blue = (90, 50, 50)
upper_blue = (170, 255, 255)
mask = cv2.inRange(hsv_image, lower_blue, upper_blue)
blue_highlight = cv2.bitwise_and(cv2_image, cv2_image, mask=mask)

img_show(["Original Image", "Blue Highlight"], [cv2_image, blue_highlight])

OpenCV의 다양한 색상 변환 기능을 통해 이미지를 분석하거나 특정 색상만 추출하는 작업을 할 수 있습니다. 색상 변환은 이미지 전처리와 분석에 매우 유용하며, 각 색상 공간의 특성에 맞게 적절히 사용할 수 있습니다.

반응형