컬러 영상은 3차원 numpy.ndarray로 표현한다. 👉 img.shape = (h, w, 3)
OpenCV에서는 RGB 순서가 아니라 BGR 순서를 기본으로 사용한다.
OpenCV에서 컬러 영상 다루기
img1 = cv2.imread('lenna.bmp', cv2.IMREAD_COLOR)
img3 = cv2.imread('lenna.bmp', cv2.IMREAD_GRAYSCALE)
img4 = cv2.cvtColor(img3, cv2.COLOR_GRAY2BGR)
RGB 색 공간
- 빛의 삼원색인 빨간색(R), 녹색(G), 파란색(B)을 혼합하여 색상을 표현 (가산 혼합)
- TV & 모니터, 카메라 센서 Bayer 필터, 비트맵
(색상) 채널 분리 - cv2.split
cv2.split(m, mv=None)
- m : 다채널 영상
(e.g.) (B, G, R)로 구성된 컬러 영상 - mv : 출력 영상
- dst : 출력 영상의 리스트 (나오는 결과)
(색상) 채널 결합 - cv2.merge
cv2.merge(mv, dst=None)
- mv : 입력 영상 리스트 또는 튜플
- dst : 출력 영상
💬 실습
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 색 평면 분할
b_plane, g_plane, r_plane = cv2.split(src)
#b_plane = src[:, :, 0]
#g_plane = src[:, :, 1]
#r_plane = src[:, :, 2]
cv2.imshow('src', src)
cv2.imshow('B_plane', b_plane)
cv2.imshow('G_plane', g_plane)
cv2.imshow('R_plane', r_plane)
cv2.waitKey()
cv2.destroyAllWindows()
색 공간 변환
- 영상 처리에서는 특정한 목적을 위해 RGB 색 공간을 HSV, YCrCb, Grayscale 등의 다른 색 공간으로 변환하여 처리한다.
- OpenCV 색 공간 변환 방법
https://docs.opencv.org/master/de/d25/imgproc_color_conversions.html 참고
✔︎ 색 공간 변환 함수 - cv2.cvtColor
cv2.cvtColor(src, code, dst=None, dstCn=None)
- src : 입력 영상
- code : 색 변환 코드 (OpenCV 문서 페이지 참고)
cv2.COLOR_BGR2GRAY / cv2.COLOR_GRAY2BGR BGR ↔ GRAY cv2.COLOR_BGR2RGB / cv2.COLOR_RGB2BGR BGR ↔ RGB cv2.COLOR_BGR2HSV / cv2.COLOR_HSV2BGR BGR ↔ HSV cv2.COLOR_BGR2YCrCb / cv2.COLOR_YCrCb2BGR BGR ↔ YCrCb
- dstCn : 결과 영상의 채널 수 / 0이면 자동 결정된다.
- dst : 출력 영상
RGB 색상을 그레이스케일로 변환
- 장점 : 데이터 저장 용량 감소, 데이터 처리 속도 향상
- 단점 : 색상 정보 손실
HSV 색 공간
- Hue : 색상, 색의 종류
- Saturation : 채도, 색의 탁하고 선명한 정도
- Value : 명도, 빛의 밝기
HSV 값 범위
- cv2.CV_8U 영상의 경우
0 ≤ 𝐻 ≤ 179
0 ≤ 𝑆 ≤ 255
0 ≤ 𝑉 ≤ 255
YCrCb 색 공간
- PAL, NTSC, SECAM 등의 컬러 비디오 표준에 사용되는 색 공간
- 영상의 밝기 정보와 색상 정보를 따로 분리하여 부호화 (흑백 TV 호환)
- Y : 밝기 정보(luma)
- Cr, Cb : 색차(chroma)
YCrCb 값 범위
- cv2.CV_8U 영상의 경우
0 ≤ 𝑌 ≤255
0 ≤ 𝐶𝑟 ≤ 255
0 ≤ 𝐶𝑏 ≤ 255
'OpenCV' 카테고리의 다른 글
[OpenCV with Python] 영상처리 : 명암비 조절 (0) | 2022.02.01 |
---|---|
[OpenCV with Python] 영상처리 : 히스토그램 분석 (0) | 2022.02.01 |
[OpenCV with Python] 영상처리 : 영상의 산술 및 논리 연산 (0) | 2022.01.31 |
[OpenCV with Python] 영상처리 : 영상의 밝기 조절 (0) | 2022.01.31 |
[OpenCV] 기초 6 : 트랙바 (0) | 2022.01.31 |