🙋♂️ 오늘은 컬러 영상 처리와 색 공간에 대한 공부한 내용을 정리합니다!
✍ OpenCV는 컬러 영상데이터의 경우 GrayScale 영상과 동일하게 numpy.ndarray로 표현하며
단, OpenCV에서는 RGB 순서가 아니라 BGR 순서를 기본적으로 사용하고 있습니다.
✅ 예제 코드
|
import cv2
import numpy as np
# Color 영상을 불러오기 위해선 인자를 cv2.IMREAD_COLOR로 설정
img1 = cv2.imread('lenna.bmp', cv2.IMREAD_COLOR)
# 영상 전체를 0값으로하는 컬러 영상을 만들고 컬러 영상위에 도형 그리기
img2 = np.zeros((480, 640, 3), np.uint8)
pts = np.array([[250, 200], [300, 200], [350, 300], [250, 300]])
cv2.polylines(img2, [pts], True, (255, 0, 255), 2)
# 이미지를 GrayScale로 Read 후 cvtColor로 변경시 컬러의 정보는 없지만
# 컬러 영상이기때문에 컬러 도형을 그릴 수있음
img3 = cv2.imread('lenna.bmp', cv2.IMREAD_GRAYSCALE)
img4 = cv2.cvtColor(img3, cv2.COLOR_GRAY2BGR)
cv2.circle(img4, (300, 100), 30, (255, 255, 0), 2, cv2.LINE_AA)
cv2.imshow('img1', img1)
cv2.imshow('img2', img2)
cv2.imshow('img4', img4)
cv2.waitKey()
cv2.destroyAllWindows()
|
cs |
🖼️ 결과 이미지

✅ 예제 코드 (BGR 분할)
|
import sys
import numpy as np
import cv2
# 컬러 영상 불러오기
src = cv2.imread('candies.png', cv2.IMREAD_COLOR)
if src is None:
print('Image load failed!')
sys.exit()
# 컬러 영상 속성 확인
print('src.shape:', src.shape) # src.shape: (480, 640, 3)
print('src.dtype:', src.dtype) # src.dtype: uint8
# RGB 색 평면 분할
planes = cv2.split(src)
#b_plane = src[:, :, 0]
#g_plane = src[:, :, 1]
#r_plane = src[:, :, 2]
cv2.imshow('src', src)
cv2.imshow('B_plane', planes[0])
cv2.imshow('G_plane', planes[1])
cv2.imshow('R_plane', planes[2])
cv2.waitKey()
cv2.destroyAllWindows()
|
cs |
🖼️ 결과 이미지

✍ 일반적으로 Color영상 처리할 때는 BGR이 아닌 HSV, YCrCb, LAB 등의 형태로 변환하여 처리합니다.
✍ RGB → GrayScale로 변환의 경우 " Y= 0.299R + 0.587 + 0.144B "의 수식을 사용합니다.
장점: 데이터 저장 용량 감소, 데이터 처리 속도 향상
단점: 색상 정보 손실
✍ HSV 색 공간과 값의 범위는 아래와 같이 표현합니다.


✅ 예제 코드 (HSV 분할)
|
import sys
import numpy as np
import cv2
# 컬러 영상 불러오기
src = cv2.imread('candies.png', cv2.IMREAD_COLOR)
if src is None:
print('Image load failed!')
sys.exit()
# HSV 색 평면 분할
src_HSV = cv2.cvtColor(src, cv2.COLOR_BGR2HSV)
HSVplanes = cv2.split(src_HSV)
cv2.imshow('src', src)
cv2.imshow('H_plane', HSVplanes[0])
cv2.imshow('S_plane', HSVplanes[1])
cv2.imshow('V_plane', HSVplanes[2])
cv2.waitKey()
cv2.destroyAllWindows()
|
cs |
🖼️ 결과 이미지

본 학습 내용은 "OpenCV를 활용한 컴퓨터비전과 딥러닝" 을 참고하였음을 알려드립니다.
'Python OpenCV' 카테고리의 다른 글
| 특정 색상 영역 추출하기 (0) | 2024.02.09 |
|---|---|
| 히스토그램 분석 (0) | 2024.02.09 |
| OpenCV 그리기 함수 (0) | 2024.02.04 |
| 마스크 연산과 ROI (0) | 2024.01.26 |
| 영상의 생성, 복사, 부분 영상 추출 (0) | 2024.01.22 |