반응형
황선규 박사님의 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 색 공간
이외에도 여러가지 색 공간이 있습니다.
반응형
'Python > 파이썬 OpenCV 공부' 카테고리의 다른 글
[파이썬 OpenCV] OpenCV 함수만으로 히스토그램 그리기 - cv2.line 활용 (0) | 2020.09.28 |
---|---|
[파이썬 OpenCV] 영상의 히스토그램 분석하기 - cv2.calcHist (0) | 2020.09.28 |
[파이썬 OpenCV] 영상의 산술 연산 - cv2.add, cv2.addWeighted, cv2.subtract, cv2.absdiff (0) | 2020.09.27 |
[파이썬 OpenCV] 영상의 밝기 조절 - cv2.add, np.clip (0) | 2020.09.27 |
[파이썬 OpenCV] 동영상 전환 이펙트, 디졸브(dissolve)효과 (1) | 2020.09.27 |