● 히스토그램 작성 순서도
● cvCreateHist 함수 (히스토그램을 정의하는데 사용하는 함수)
CvHistogram* cvCreateHist( int dims, int *sizes, int type,
float **range=NULL, int uniform=1)
-> dims
히스토그램의 차원을 지정.
흑백 영상이면 1, 컬러 영상이면 3차원.
-> sizes
히스토그램 차원의 크기를 나타내며 배열로 표시함.
1차원 256 흑백영상의 경우 0부터 255까지 256개의 박대를 사용하므로
int sizes[1] = {256} 으로 나타낼 수 있다.
3차원 컬러영상의 경우 각각의 태널은 256개의 막대를 사용하므로
int sizes[3] = {256, 256, 256} 으로 나타낼 수 있다.
-> type
히스토그램 표현 형식을 나타낸다.
type = CV_HIST_ARRAY이면 다채널 밀집 배열 (0인 원소가 적은 배열)을 나타내고
type = CV_HIST_SPARSE이면 다채널 희소 배열 (0인 원소가 많은 배열)을 나타낸다.
-> ranges
히스토그램의 x축 범위를 나타낸다.
-> uniform
히스토그램에서 막대 사이의 간격을 일정하게 할 것인지 결정한다.
uniform ≠ 0 이면 막대의 간격을 일정한 간격으로 한다.
● cvCalcHist 함수 (영상으로부터 히스토그램을 계산하는데 사용하는 함수)
void cvCalcHist( IplImage** img, CvHistogram* hist);
-> img
원 영상을 나타냄
-> hist
히스토그램에 대한 포인터를 나타낸다.
● cvGetMinMaxHistValue 함수 (막대에 대한 최대 빈도수와 최소 빈도수를 구함)
void cvGetMinMaxHistValue( CvHistogram* hist,
float* value_min, float* value_max);
-> hist
히스토그램을 나타냄
-> value_min
히스토그램의 최소 빈도수를 나타낸다.
-> value_max
히스토그램의 최대 빈도수를 나타낸다.
● cvScale 함수 (하나의 배열을 다른 배열로 선형 변환헤 의해 변환하는 함수)
void cvScale( CvArr* src, CvArr* dst, double scale=1, double shift=0);
-> src
원 영상을 나타낸다.
-> dst
목적 영상을 나타낸다.
-> scale
스케일 파라미터를 나타낸다.
-> shift
이동 파라미터를 나타낸다.
cvScale() 함수는 dst = src * scale + shift 에 의해 변환된다.(cvConvertScale()와 동일)
● cvRectangle 함수 (직사각형을 그리기 위한 함수)
void cvRectangle( CvArr* img, CvPoint pt1, CvPoint pt2, CvScalar color, int thickness=1 );
-> img
직사각형이 그려질 영상을 나타냄
-> pt1
직사각형의 모서리를 나타낸다.
-> pt2
직사각형의 반대편 모서리를 나타낸다.
-> color
직사각형의 선의 색상을 나타낸다.
-> thickness
직사각형의 선의 두께를 나타낸다.
cvRectangle() 함수에서 모서리 좌표 pt1과 pt2를 정할 때 원정이 어디에 위치하느냐는 중요한 문제이다.
영상 좌표에서 원점은 왼쪽 상단임을 알고있자!
● cvGetReal1D 함수 (1차원 히스토그램에서 i번째 막대의 빈고수를 얻기 위한 함수)
double cvGetReal1D( CvArr* arr, int idx0 );
-> arr
1차원 배열을 나타낸다.
-> idx0
원소의 위치에 대한 인덱스를 나타낸다.
cvGetReal1D(histo->bins, i) 는 배열 bins 에서 i번째 인덱스에 대한 원소를 반환한다.
● cvSet 함수 (영상을 주어진 값으로 설정할 때 사용)
void cvSet( CvArr* arr, CvScalar valuem CvArr* mask=0 );
-> arr
원 영상을 나타낸다.
-> value
채울 값을 지정한다.
-> mask
마스크를 나타낸다.
cvSet(histImage, cvScalarAll(255), 0) 이면 영상 histImage의 픽셀값을 255로 설정한다.
cvScalarAll(double num);
-> 모든 스칼라의 value들을 num 으로 초기화시켜준다.
● cvEqualizeHist 함수 (흑백 영상에서 히스토그램 평활화하는데 사용하는 함수)
void cvEqualizeHist(CvArr* src, CvArr* dst);
-> src
흑백 영상을 나타낸다.
-> dst
목적 영상을 나타낸다.
출처: OpenCV를 이용한 영상처리( 임동훈 지음)