그림 6-12는 실제 영상에 대하여 명암비를 조절한 결과를 보여준다. 그림 6-12(a)는 입력 영상인 lenna.bmp 파일이다. 그림 6-12(b)는 명암비 조절 수식에서 값을 -0.4로 설정한 결과 영상이며, 명암비가 감소하여 영상이 전체적으로 뿌옇게 변한 듯한 느낌을 준다. 그림 6-12(C)는 값을 0.4로 설정한 결과이다. 전체적으로 명암비가 증가하여 입력 영상보다 더욱 선명한 느낌을 준다.
그러면 실제 영상의 명암비를 조절하는 함수를 구현해보자. 명암비 조절 함수의 이름은 IppContrast를 사용하기로 하고, IppEnhance.h 파일에 다음과 같은 함수의 선언을 추가하자.
void IppContrast(IppByteImage& img, int n);
IppContrast 함수는 IppByteImage 객체의 참조형인 img와 명암비 조절 비율을 나타내는 정숫값 n을 인자로 받는다. 명암비 조절 결과는 다시 img에 저장된다. IppContrast 함수의 전체 코드는 소스 6-6에 나타내었다.
void IppContrast(IppByteImage& img, int n) { int size = img.GetSize(); BYTE* p = img.GetPixels(); for (int i = 0; i < size; i++) { p[i] = static_cast<BYTE>(limit(p[i] + (p[i] - 128) * n / 100)); } }
앞서 명암비 조절 수식에서 설명한 명암비 조절 상수 α는 소스 6-6에서 (n/100)에 해당한다. α가 -1보다 큰 값을 가져야 하므로, n의 값은 -100보다 큰 정수가 입력되어야 한다. IppContrast 함수에서도 limit 함수를 이용하여 결과 영상의 픽셀 값이 그레이스케일 값의 범위를 벗어나지 않도록 하였다.