본문 바로가기
OpenCV

OpenCV 영상처리 - 컬러 영상과 색 공간

by Kwonys 2024. 3. 18.
728x90
반응형

OpenCV와 컬러 영상

  • 컬러 영상은 3차원 numpy.ndarray로 표현. img.shape = (h, w, 3)
  • OpenCV에서는 RGB 순서가 아니라 BGR 순서를 기본으로 사용

OpenCV에서 컬러 영상 다루기

img1 = cv2.imread('lenna.bmp', cv2.IMREAD_COLOR)
img2 = np.zeros((480, 640, 3), np.uint8)
img3 = cv2.imread('lenna.bmp', cv2.IMREAD_GRAYSCALE)
img4 = cv2.cvtColor(img3, cv2.COLOR_GRAY2BGR)

img4의 경우, 영상의 각 픽셀은 B, G, R 색 성분 값이 모두 같게 설정됨

 

RGB 색 공간

  • 빛의 삼원색인 빨간색(R), 녹색(G), 파란색(B)을 혼합하여 색상을 표현 (가산 혼합)
  • TV & 모니터, 카메라 센서 Bayer 필터, 비트맵

(색상) 채널 분리

cv2.split(m, mv=None) -> dst
  • m : 다채널 영상
    • ex. (B, G, R)로 구성된 컬러 영상
  • mv : 출력 영상
  • dst : 출력 영상의 리스트

(색상) 채널 결합

cv2.merge(mv, dst=None) -> dst
  • mv : 입력 영상 리스트 또는 튜플
  • dst : 출력 영상

RGB 색상 평면 나누기

src = cv2.imread('candies.png', cv2.IMREAD_COLOR)

# 컬러 영상 속성 확인
print('src.shape:', src.shape) # src.shape: (480, 640, 3)
print('src.shape:', 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)
  • 실행 결과 :

색 공간 변환

  • 영상 처리에서는 특정한 목적을 위해 RGB 색 공간을 HSV, YCrCb, Grayscale 등의 다른 색 공간으로 변환하여 처리
  • OpenCV 색 공간 변환 방법 (참고)

 

색 공간 변환 함수

cv2.cvtColor(src, code, dst=None, dstCn=None) -> dst
  • src : 입력영상
  • code : 색 변환 코드(OpenCV 문서 페이지) 참고
  • dstCn : 결과 영상의 채널 수. 0이면 자동 결정.
  • dst : 출력 영상

RGB 색상을 그레이스케일로 변환

  • 장점 : 데이터 저장 용량 감소, 데이터 처리 속도 향상
  • 단점 : 색상 정보 손실

HSV 색 공간

  • Hue : 색상, 색의 종류 (각도로 표현)
  • Saturation : 채도, 색의 탁하고 선명한 정도
  • Value : 명도, 빛의 밝기

HSV 값 범위

  • cv2.CV_8U 영상의 경우
    • 0 ≤ H ≤ 179
    • 0 ≤ S ≤ 255
    • 0 ≤ V ≤ 255

HSV 색상 평면

src = cv2.imread('candies.png', cv2.IMREAD_COLOR)
src_hsv = cv2.cvtColor(src, cv2.COLOR_BGR2HSV)
Hue, Saturation, Value = cv2.split(src_hsv)

cv2.imshow('src', src)
cv2.imshow('H_plane', Hue)
cv2.imshow('S_plane', Saturation)
cv2.imshow('V_plane', Value)
cv2.waitKey()
cv2.destroyAllWindows()

YCrCb 색 공간

  • PAL, NTSC, SECAM 등의 컬러 비디오 표준에 사용되는 색 공간
  • 영상의 밝기 정보와 색상 정보를 따로 분리하여 부호화 (흑백 TV 호환)
  • Y : 밝기 정보(luma)
  • Cr, Cb : 색차(chroma)

YCrCb 값 범위

  • cv2.CV_8U 영상의 경우
    • 0 ≤ Y ≤ 255
    • 0 ≤ Cr ≤ 255
    • 0 ≤ Cb ≤ 255

YCrCb 색상 평면

src = cv2.imread('candies.png', cv2.IMREAD_COLOR)
src_YCrCb = cv2.cvtColor(src, cv2.COLOR_BGR2YCrCb)
Y, Cr, Cb = cv2.split(src_YCrCb)

cv2.imshow('src', src)
cv2.imshow('Y_plane', Y)
cv2.imshow('Cr_plane', Cr)
cv2.imshow('Cb_plane', Cb)
cv2.waitKey()
cv2.destroyAllWindows()

728x90
반응형