OpenCV

[OpenCV with Python] 영상처리 : 컬러 영상과 색 공간

AI 그게 뭔데 2022. 2. 1. 10:40

컬러 영상은 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()

 

 

 

 


 공간 변환

 

✔︎  색 공간  함수  -  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