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

Python – 다양한 색상 공간에서 이미지 시각화하기

OpenCV-Python 소개

OpenCV-Python은 컴퓨터 비전(computer vision) 문제를 해결하기 위해 설계된 Python 바인딩 라이브러리입니다. OpenCV-Python은 MATLAB 스타일의 문법을 제공하는 고성능 수치 연산 라이브러리인 Numpy를 활용하며, OpenCV의 모든 배열 구조는 Numpy 배열과 상호 변환됩니다.

이 글에서는 하나의 이미지를 RGB, 그레이스케일, YCrCb, HSV 등 다양한 색상 공간으로 변환하고, 히트맵·스펙트럼 맵 같은 컬러맵으로 시각화하는 방법을 예제 코드와 함께 살펴봅니다.

1. RGB 이미지로 읽어 표시하기

matplotlib의 imshow() 함수를 사용하면 이미지를 간단하게 화면에 출력할 수 있습니다.

# cv2와 matplotlib 모듈 임포트
import cv2
import matplotlib.pyplot as plt

# 이미지 읽기
img = cv2.imread('download.png')

# 이미지 표시
plt.imshow(img)

참고: OpenCV는 기본적으로 이미지를 BGR 순서로 읽어 들이는 반면, matplotlib은 RGB 순서를 기대합니다. 따라서 위 코드에서는 빨강과 파랑이 뒤바뀌어 보일 수 있으며, 정확한 색상을 원한다면 cv2.cvtColor(img, cv2.COLOR_BGR2RGB)로 변환한 뒤 표시하는 것이 좋습니다.

2. 그레이스케일(흑백) 이미지로 변환하기

cv2.imread()의 두 번째 인자로 0을 전달하면 처음부터 흑백으로 이미지를 읽을 수 있습니다. 또는 cv2.cvtColor() 함수를 사용해 BGR 이미지를 그레이스케일로 변환할 수도 있습니다.

import cv2

# 그레이스케일로 바로 읽기
img = cv2.imread('download.png', 0)

# 또는 cvtColor로 변환
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 이미지 표시
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

3. YCrCb 색상 공간으로 변환하기

YCrCb 색상 공간은 휘도 성분(Y)과 색차 성분(Cr, Cb)으로 이미지를 표현합니다. 사람의 시각 특성을 반영하기 때문에 영상 압축이나 피부색 검출 등에 널리 활용됩니다.

import cv2

# 이미지 읽기
img = cv2.imread('download.png')

# YCrCb 색상 공간으로 변환
img = cv2.cvtColor(img, cv2.COLOR_BGR2YCrCb)

# 이미지 표시
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

4. HSV 색상 공간으로 변환하기

HSV(Hue, Saturation, Value) 색상 공간은 색조·채도·명도의 세 요소로 색을 표현합니다. 특정 색상 범위를 추출하는 객체 추적이나 색상 기반 필터링 작업에 특히 유용합니다.

import cv2

# 이미지 읽기
img = cv2.imread('download.png')

# HSV 색상 공간으로 변환
img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

# 이미지 표시
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

5. 히트맵(Heat Map)으로 시각화하기

matplotlib의 cmap 옵션에 'hot' 컬러맵을 지정하면 이미지를 밝기 강도가 색으로 표현되는 히트맵 형태로 나타낼 수 있습니다.

import matplotlib.pyplot as plt
import cv2

# 이미지 읽기
img = cv2.imread('download.png')

# 히트맵 형태로 표시
plt.imshow(img, cmap='hot')

6. 스펙트럼 맵으로 시각화하기

'nipy_spectral' 컬러맵을 사용하면 다채로운 스펙트럼 색상으로 이미지를 시각화할 수 있어, 값의 분포를 직관적으로 파악하는 데 도움이 됩니다.

import matplotlib.pyplot as plt
import cv2

# 이미지 읽기
img = cv2.imread('download.png')

# 스펙트럼 맵 형태로 표시
plt.imshow(img, cmap='nipy_spectral')

마무리

이처럼 OpenCV-Python과 matplotlib을 함께 활용하면 하나의 이미지를 RGB, 그레이스케일, YCrCb, HSV 등 다양한 색상 공간으로 자유롭게 변환하고, 히트맵이나 스펙트럼 맵 같은 컬러맵으로 시각화할 수 있습니다. 분석 목적에 맞는 색상 공간과 컬러맵을 선택하면 이미지 처리 및 컴퓨터 비전 작업의 효율을 크게 높일 수 있습니다.