컬러 영상과 색 공간

매일 공부(ML)·2021년 11월 14일
0

OPEN CV

목록 보기
9/45

OpenCV와 컬러 영상

  • 컬러 영상은 3차원 numpy.ndarray로 표현하고, img.shape = (h,w,3)

  • OpenCV에는 BGR순서

  • Code

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) # B,G,R색 성분 값이 모두 같게 설정

RGB 색 공간

  • 가산 혼합: 색의 삼원소 혼합하여 색상 표현

  • 예시: TV, 모니터, 카메라 센서 Bayer필터, 비트맨

색상 처리

  1. 색상 채널 분리
cv2.split(m, mv=None) -> dst
  • m: 다채널 영상(B,G,R)로 구성된 컬러 영상

  • mv: 출력 영상

  • dst: 출력 영상의 리스트

  1. 색상 채널 결합
cv2.merge(mv, dst=None) -> dst
  • mv: 입력 영상 리스트 또는 튜플

  • dst: 출력 영상

  1. code of RGB색상 평면 나누기
src = cv2.imread('candies.png', cv2.IMREAD_COLOR)

# 컬러 영상 속성 확인
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)

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, Lab 등의 다른 색 공간으로 처리

  • 예시

색 공간 변환 함수

cv2.cvtColor(src, code, dst=None, dstCn=None) -> dst
  • src: 입력 영상

  • code: 색 변환 코드
    링크텍스트

  • dstCn: 결과 영상의 채널 수이고 0이면 자동 결정된다.

  • dst: 출력 영상

RGB 색상을 Grayscale로 변환

  1. Preview

  • 장점: 데이터 저장 용량이 감소하고, 데이터 처리 속도 향상

  • 단점: 색상 정보 손실

  1. HSV 색 공간
  • Hue: 색상, 색의 종류를 각도로 표현

  • Saturation: 채도

  • Value: 명도

  • 값의 범위

    • cv2.CV_8U

      I) 0 <= H <= 179

      II) 0 <= S <= 255

      III) 0 <= V <= 255

  • Code
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()

  1. YCrCb 색 공간
  • PAL, NTSC, SECAM 등의 컬러 비디오 표준에 사용되는 색 공간

  • 영상의 밝기 정보와 색상 정보를 따로 분리하여 부호화 (흑백 TV 호환)

  • Y : 밝기 정보(luma)

  • Cr, Cb : 색차(chroma)

  • 값의 범위

    • cv2.CV_8U영상

      I) 0<= Y <=255

      II) 0 <=Cr <= 255

      III) 0 <=Cb <= 255

  • Code
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()

profile
성장을 도울 아카이빙 블로그

0개의 댓글