그레이스케일 영상은 밝기 정보를 256단계로 구분하여 표현합니다. 즉, 그레이스케일 영상에서 하나의 픽셀은 0부터 255 사이의 정수 값을 가질 수 있으며, 0은 가장 어두운 검은색을 표현하고 255는 가장 밝은 흰색을 표현합니다. 그레이스케일 영상에서 픽셀이 가질 수 있는 값의 범위를 그레이스케일 레벨(grayscale level)이라고 합니다. 즉, 그레이스케일 레벨은 0부터 255 사이의 정수 범위를 의미합니다. 그레이스케일 레벨의 값에 따른 실제 밝기 정도를 그림 1-6에 나타냈습니다. 그림 1-6에서 배경은 그레이스케일 중간값인 128로 설정하였고, 중앙에 검은색에서 흰색으로 변하는 부분이 그레이스케일 값을 밝기로 표현한 부분입니다.
▲ 그림 1-6 그레이스케일 값에 따른 밝기 변화
그레이스케일 값을 저장하기 위하여 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;