Page 17 -
P. 17
그레이스케일 영상은 밝기 정보를 256단계로 구분하여 표현합니다. 즉, 그레이스케일 영상에서
하나의 픽셀은 0부터 255 사이의 정수 값을 가질 수 있으며, 0은 가장 어두운 검은색을 표현하고
255는 가장 밝은 흰색을 표현합니다. 그레이스케일 영상에서 픽셀이 가질 수 있는 값의 범위를 1
그레이스케일 레벨(grayscale level)이라고 합니다. 즉, 그레이스케일 레벨은 0부터 255 사이의 정
수 범위를 의미합니다. 그레이스케일 레벨의 값에 따른 실제 밝기 정도를 그림 1-6에 나타냈습니
다. 그림 1-6에서 배경은 그레이스케일 중간값인 128로 설정하였고, 중앙에 검은색에서 흰색으 컴퓨터 비전과 영상의 이해
로 변하는 부분이 그레이스케일 값을 밝기로 표현한 부분입니다.
그림 1-6 그레이스케일 값에 따른 밝기 변화
0 64 128 192 255
그레이스케일 값을 저장하기 위하여 C/C++에서는 보통 unsigned char 자료형을 사용합니다.
unsigned char 자료형은 1바이트(byte)의 크기를 가지며 부호 없는 8비트(bit) 정수 값을 저장할
수 있습니다. 즉, unsigned char 자료형에는 0부터 255 사이의 정수를 저장할 수 있으며, 그레이
스케일 값을 표현하기에 가장 적합한 자료형입니다. 그런데 여러 운영 체제와 라이브러리에서는
unsigned char 자료형 이름을 아래와 같이 재정의하여 사용합니다.
typedef unsigned char BYTE;
typedef unsigned char uint8_t;
typedef unsigned char uchar;
여기서 BYTE는 주로 Windows 운영 체제에서 사용하는 이름 재정의 방식이고, uint8_t 타입은
리눅스에서 사용됩니다. OpenCV 라이브러리에서는 unsigned char 대신에 uchar라는 이름을 사
용합니다. 이 책에서도 0부터 255 사이의 정수 값을 표현할 때에는 주로 uchar 자료형을 이용합
니다.
실제 그레이스케일 영상에서 픽셀 밝기와 그레이스케일 값과의 상관관계를 살펴보겠습니다. 그
림 1-7은 camera.bmp 영상에서 카메라맨 머리 부분의 픽셀 값 분포를 확대하여 2차원 배열 형
태로 나타낸 그림입니다. 그림 1-7의 오른쪽 확대된 그림에서 밝은 회색 영역의 픽셀은 180~200
사이의 큰 값으로 구성되어 있는 것을 확인할 수 있습니다. 반면에 카메라맨의 머리카락에 해당하
는 어두운 영역에서는 10~30 정도의 작은 픽셀 값을 가지고 있습니다. 즉, 영상에서 밝은 영역의
023
OpenCV(본문)인디고출력용_0326.indb 23 2019-03-26 오후 1:28:31