이 전 강의에서도 많이 다뤘지만 다시한번 COLOR에 대해서 다뤄보자면
컬러영상은 3차원 numpy.ndarray 로 표현된다. 즉, 3차원 행렬로 표현되는 걸 알 수 있다.
이는 Width Height 3Color ( B , G , R ) 순의 행렬로 표현될 수 있다.
예를들면
img1 = cv2.imread( 'lenna.bmp', cv2,IMREAD_COLOR ) 라고 하는 OpenCV함수를 이용해 이미지를 읽을수있고
img2 = np.zeros((480,640,3), np.uint8) 이라는 Numpy를 사용하여 비어있는 영상 ( 버퍼 )를 만들수도 있다.
그리고 GrayScale 로 불러와진 영상을 Color 영상으로 전환시킬 수도 있는데 이도 OpenCV 함수인
cvtColor 함수를 사용해서 BGR 순의 컬러영상으로 전환할 수 있다.
* GrayScale의 영상이 Color영상으로 변환될뿐 실제로 흑백이미지가 어떤 랜덤한 컬러영상으로 변하는건 아니다.
본격적으로 색공간에 대해서 알아보자면
1. RGB 색공간
- 이는 우리가 가장 많이 알고있는 빛의 3원색인 Red , Green , Blue 를 의미한다.
- 또한 카메라 센서 자체에서도 RGB의 색공간으로 받아오기 때문에 가장 많이 사용된다.
RGB의 Color Value는 각각 떼어보면 GrayScale 영상의 형태로 볼 수 있다.
이는 cv2.split 이라는 함수를 사용하여 각각의 원소값을 뗄 수 있다.
split을 사용하게되면 3개의 GrayScale 영상으로 리스트형태로 묶어져서 출력된다.
반대로 cv2.merge 라는 함수를 사용하여 RGB 각각의 원소값을 가진 영상을 결합할 수도 있다.
위와같이 split 함수로 원본 컬러영상을 분할하게되면 아래와 같이 B G R 의 영상이 분리되는 걸 볼 수 있다.
그래서 B G R 의 영상을 자세히 보면 B영상은 파란성분이 많은 부분이 더 밝게나타나는 걸 확인할 수 있다.
하지만, 실제 영상처리를 할때는 BGR RGB등의 색상을 많이 이용하지는 않는다.
BGR을 이용하여 다른 색공간으로 변환시킨 뒤 그 변형된 색공간을 사용하는 경우가 많다.
다른 색공간은 어떤 것들이 있는지 살펴보자
일단 cv2.cvtColor ( src, code, dst , dstCn ) 함수를 사용할 수 있는데
code에 어떤 색공간으로 변형할지 그 인자를 넣어주면 된다.
BGR -> GRAY ( COLOR_GRAY2BGR)
BGR -> RGB ( COLOR_RGB2BGR)
BGR -> HSV ( COLOR_HSV2BGR)
BGR -> YCrCb ( COLOR_YCrCb2BGR)
의 인자를 사용하면 현재 BGR 성분의 컬러영상을 해당 색공간으로 변형시킬 수 있다.
이 외에도 많은 변환 인자가 존재하는데 ColorConversionCodes를 검색하면 찾을 수 있다.
이론적인 부분을 살펴보자면
RGB 색상을 그레이스케일로 변환할때
0.299R + 0.587G + 0.114B 의 가중치합을 통해 그레이스케일로 변환시킨다.
( GREEN > RED > BLUE ) 성분의 중요도에따라 가중치를 둔다.
장점은 데이터 저장 용량감소, 데이터 처리 속도 향상등이 있지만
단점은 당연하지만 색상 정보가 손실될 수 있다.
그리고 HSV 의 색공간은
Hue 색상 ( 색의 종류 )
Saturation 채도 ( 색의 탁하고 선명한 정도 )
Value 명도 ( 빛의 밝기 )
를 표현하는데 HSI , HSV, HSL 이라고 비슷하지만 다른 색공간이 있는데
색을 표현하는 색상 , 채도 , 명도를 표현하는 형식은 비슷하다고 한다.
그래서 Hue는 각도0~360 Saturation Value는 0~255의 값으로 표현할 수 있는데
CV_8U의 경우 각도를 360까지 표현할 수 없기때문에 반절인 0~179의 값으로 바꿔서 표현해야 한다.
BGR의 컬러값을 HSV의 색상평면값으로 변환하게 되면
위와같이 HSV로 나눠져서 볼 수 있다.
Hue를 보게되면 빨간색에 가까운 0 , 179 의값들은 밝게나오는 걸 볼 수있다.
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
패스트캠퍼스 [직장인 실무교육]
프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.
fastcampus.co.kr
'Program > OPEN_CV' 카테고리의 다른 글
[Open CV] 기본적인 영상처리 기법 _ 영상의 명암비 조절 (0) | 2022.05.10 |
---|---|
[Open CV] 기본적인 영상처리 기법 _ 히스토그램 분석 (0) | 2022.05.10 |
[Open CV] 기본적인 영상처리 기법 _ 영상의 산술 및 논리 연산 (0) | 2022.05.07 |
[Open CV] 기본적인 영상처리 기법 _ 영상의 밝기 조절 (0) | 2022.05.06 |
[Open CV] OpenCV-Python 기초 사용법 _ 실전코딩 (0) | 2022.05.05 |