Python/파이썬 OpenCV 공부

[파이썬 OpenCV] 컬러 영상과 색 공간 - 색상 분리(cv2.split), 색상 결합(cv2.merge), 색 변환(cv2.cvtColor)

AI 꿈나무 2020. 9. 27. 18:13
반응형

황선규 박사님의 OpenCV 강의를 공부하면서 정리하였습니다.

 


컬러 영상과 색 공간

 컬러 영상은 3차원 np.ndarray로 표현합니다.

 img.shape = (h, w, 3)입니다.

 OpenCV에서는 RGB 순서가 아니라 BGR 순서를 기본으로 사용합니다.

 

 RGB 색 공간은 빛의 삼원색인 빨간색(R), 녹색(G), 파란색(B)를 혼합하여 색상을 표현합니다. (가산 혼합)

 

1. (색상) 채널 분리 - cv2.split

 cv2.split 함수를 이용해서 RGB 색상 평면을 나눌 수 있습니다.

 

[함수 설명]

 

cv2.split(m, mv=None) -> dst

• m: 다채널 영상 (e.g.) (B, G, R)로 구성된 컬러 영상
• mv: 출력 영상
• dst: 출력 영상의 리스트

 

[예시 코드]

# 컬러 영상 불러오기
src = cv2.imread('candies.png', cv2.IMREAD_COLOR)


# 불러왔는지 확인
if src is None:
    print('Image load failed!')
    sys.exit()
    
    
# 컬러 영상 속성 확인
print('scr.shape:', scr.shape)  # src.shape: (480, 640, 3)
print('src.dtype:', src.dtype)  # src.dtype: unit8


# RGB 색 평면 분할
b_plane, g_plane, r_plane = cv2.split(src)


# 슬라이싱 이용하여 RGB 색 평면 분할
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()

 

 

2. (색상) 채널 결합 - cv2.merge

 cv2.merge 함수로 색상 채널을 결합할 수 있습니다.

 

[함수 설명]

 

cv2.merge(mv, dst=None) -> dst

• mv: 입력 영상 리스트 또는 튜플
• dst: 출력 영상

 

[예시 코드]

# 컬러 영상 불러오기
src = cv2.imread('candies.png', cv2.IMREAD_COLOR)


# RGB 색 평면 분할
b_plane, g_plane, r_plane = cv2.split(src)


# 색상 채널 결합
src_merge = cv2.merge((b_plane, g_plane, r_plane))


# 영상 출력
cv2.imshow('src', src)
cv2.imshow('merge', src_merge)
cv2.waitKey()

cv2.destroyAllWindows()

 

 

 src 영상의 색상과 merge 영상의 색상이 같습니다.

 

3. 색 공간 변환 함수 - cv2.cvtColor

 영상 처리에서는 특정한 목적을 위해 RGB 색 공간을 HSV, YCrCb, Grayscale 등의 다른 색 공간으로 변환하여 처리할 수 있습니다.

 OpenCV에서는 cv2.cvtColor함수로 색 공간을 변환할 수 있습니다.

 색 변환 방법은 여기에서 확인할 수 있습니다.

 

[함수 설명]

cv2.cvtColor(src, code, dst=None, dstCn=None) -> dst

• src: 입력 영상
• code: 색 변환 코드 (여기에서 확인)
• dstCn: 결과 영상의 채널 수. 0이면 자동 결정.
• dst: 출력 영상

[예시 코드]

# BGR -> HSV
src_hsv = cv2.cvtColor(src, cv2.COLOR_BGR2HSV)
planes = cv2.split(src_hsv)

 

 이처럼 BGR 색상을 HSV 색상으로 변환시킬 수 있습니다.

 

4. HSV 색 공간

 

5. YCrCb 색 공간

 

 이외에도 여러가지 색 공간이 있습니다.

 

반응형