그렇다면 그림 5-16(a) 히스토그램을 그림 5-16(c) 히스토그램처럼 만들려면 어떻게 해야 할까요? 그 해답이 바로 그림 5-16(b)에 나타난 변환 함수 그래프입니다. 그림 5-16(b)와 같이 (Gmin, 0)과 (Gmax, 255)를 지나가는 직선의 방정식을 구해서 이를 변환 함수로 사용하면 히스토그램 스트레칭이 수행됩니다. 이 직선의 방정식을 구하려면 직선의 기울기와 y 절편을 구하면 됩니다. 직선의 기울기는 255 / (Gmax −Gmin)이고, y 절편은 비례식을 이용하여 구하면 -255⋅Gmin / (Gmax-Gmin)이 됩니다. 그러므로 직선의 방정식은 다음과 같이 결정됩니다.
히스토그램 스트레칭을 위한 함수는 OpenCV에서 따로 제공하지는 않습니다. 그러나 OpenCV가 기본적인 산술 연산에 대한 연산자 재정의를 지원하기 때문에 앞 수식을 소스 코드로 변경하는 것은 그리 어려운 일이 아닙니다. 앞 수식에서 Gmin과 Gmax 값은 minMaxLoc() 함수를 사용하면 쉽게 구할 수 있습니다.
실제 영상에 대하여 히스토그램 스트레칭을 수행하는 예제 코드를 코드 5-9에 나타냈습니다. 코드 5-9의 histgoram_stretching() 함수는 hawkes.bmp 입력 영상에 대해 히스토그램 스트레칭을 수행하고, 해당 히스토그램 그래프를 화면에 출력합니다. histgoram_stretching() 함수가 정의된 소스 파일과 사용된 영상 파일은 내려받은 예제 파일 중 ch05/histogram 프로젝트에서 확인할 수 있습니다.