더북(TheBook)

코드 5-7 그레이스케일 영상의 히스토그램 구하기 [ch05/histogram]

01    Mat calcGrayHist(const Mat& img)
02    {
03        CV_Assert(img.type() = = CV_8UC1);
04     
05        Mat hist;
06        int channels[] = { 0 };
07        int dims = 1;
08        const int histSize[] = { 256 };
09        float graylevel[] = { 0, 256 };
10        const float* ranges[] = { graylevel };
11     
12        calcHist(&img, 1, channels, noArray(), hist, dims, histSize, ranges);
13     
14        return hist;
15    }

 

3행 CV_Assert() 매크로 함수를 이용하여 calcGrayHist() 함수로 전달된 img 영상이 그레이스케일 영상인지를 검사합니다. 만약 img 영상이 그레이스케일 영상이 아니면 에러가 발생하며 프로그램이 종료합니다.

5~10행 12행에서 호출하는 calcHist() 함수에 전달할 인자를 생성하는 구문입니다.

5행 히스토그램 정보를 저장할 Mat 타입의 변수 hist를 선언합니다.

6행 히스토그램을 구할 채널 번호를 담은 channels 배열을 생성합니다. 그레이스케일 영상은 한 개의 채널을 가지고 있고, 채널 번호는 0부터 시작하므로 channels 배열은 0 하나만 원소로 가집니다.

7행 dims 변수에 1을 대입한 것은 하나의 채널에 대해서만 히스토그램을 구하기 때문이며, 결과로 구해지는 hist 행렬이 1차원 행렬임을 나타냅니다.

8행 histSize 배열 원소에 256을 하나 지정한다는 것은 입력 영상의 첫 번째 채널 값의 범위를 256개 빈으로 나누어 히스토그램을 구하겠다는 의미입니다.

9~10행 graylevel 배열의 원소에는 그레이스케일 값의 최솟값과 최댓값인 0과 256을 차례대로 지정합니다. ranges 배열은 graylevel 배열 이름을 원소로 갖는 배열입니다.

12행 calcHist() 함수를 이용하여 img 영상의 히스토그램을 구하고, 그 결과를 hist 변수에 저장합니다.

14행 구해진 히스토그램 hist를 반환합니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.