sum() : 주어진 행렬의 전체 원소 합 반환
Scalar sum(InputArray src);
mean() : 주어진 행렬의 원소 평균 반환
Scalar mean(InputArray src, InputArray mask = noArray());
위 두 함수는 4채널 이하의 행렬에 대해서만 동작하고 반환형이 Scalar 타입임.
minMaxLoc() : 주어진 행렬의 최소값, 최대값을 찾는 함수로 최소값, 최대값이 있는 좌표 정보도 함께 알아낼 수 있음.
최소값, 최대값을 받을 double 형 변수의 주소와 최소값, 최댓값 위치 좌표를 받을 Point형 변수의 주소를 매개변수로 전달하고 필요 없는 경우 0을 대입
void minMaxLoc(InputArray src, CV_OUT double* minVal,
CV_OUT double* maxVal = 0, CV_OUT Point* minLoc = 0,
CV_OUT Point* maxLoc = 0, InputArray mask = noArray());
normalize() : 행렬의 노름(norm) 값을 정규화하거나 또는 원소 값 범위를 특정 범위로 정규화할 때 사용하는 함수
정규화란 비율을 유지한 채 값을 특정 값 영역으로 변환하는 기법으로, 모든 데이터가 같은 정도의 스케일(중요도)로 반영되도록 해주는 것이 정규화의 목표.
특히 실수로 구성된 행렬을 그레이스케일 영상 형태로 변환하고자 할 때 사용하면 유용.
void normalize( InputArray src, InputOutputArray dst, double alpha = 1, double beta = 0,
int norm_type = NORM_L2, int dtype = -1, InputArray mask = noArray());
- src : 입력 행렬
- dst : 출력 행렬. src 와 같은 크기
- alpha : (원소 값 범위 정규화인 경우) 최솟값. (노름 정규화인 경우) 목표 노름 값
- beta : (원소 값 범위 정규화인 경우) 최댓값
- norm_type : 정규화 타입. 원소값 범위 정규화인 경우 NORM_MINMAX
- dtype : 결과 영상의 타입
- mask : 마스크 영상
cvRound() : 실수 값을 정수로 변환 할 때 반올림 함수. 0.5보다 크면 올림, 0.5보다 작으면 내림이고 특이한 점은 소수점아래 정확하게 0.5인 경우 가장 가까운 짝수로 반올림을 수행함. (ex. 2.5인 경우 2 반환, 3.5인경우 4 반환)
cvCeil() : 무조건 올림
cvFloor() : 무조건 내림
int cvRound(double value);
int cvRound(float value);
void useful_func() {
Mat img = imread("lenna.bmp", IMREAD_COLOR);
cout << "Sum: " << sum(img) << endl;
cout << "Mean: " << mean(img) << endl;
cout << "Mean: " << sum(img) / (img.rows * img.cols) << endl;
cout << endl;
Mat img1 = imread("lenna.bmp", IMREAD_GRAYSCALE);
cout << "Mean: " << (int)mean(img1)[0] << endl;
cout << endl;
double minVal, maxVal;
Point minPos, maxPos;
minMaxLoc(img1, &minVal, &maxVal, &minPos, &maxPos);
cout << "minVal: " << minVal << " at " << minPos << endl;
cout << "maxVal: " << maxVal << " at " << maxPos << endl;
cout << endl;
Mat src = Mat_<float>({ 1,5 }, { -1.f, -0.5f, 0.f, 0.5f, 1.f });
Mat dst;
//-1에서 1 사이의 실수로 구성된 1×5 행렬을 0부터 255 사이의 정수 행렬이 되도록 변환
normalize(src, dst, 0, 255, NORM_MINMAX, CV_8UC1);
cout << "src: " << src << endl;
cout << "dst: " << dst << endl;
cout << endl;
cout << "cvRound(2.5): " << cvRound(2.5) << endl;
cout << "cvRound(2.51): " << cvRound(2.51) << endl;
cout << "cvRound(3.4999): " << cvRound(3.4999) << endl;
cout << "cvRound(3.5): " << cvRound(3.5) << endl;
}
결과
'OpenCV' 카테고리의 다른 글
OpenCV ] 영상의 밝기 조절 + 명암비 조절 + 히스토그램 분석 (0) | 2022.08.23 |
---|---|
OpenCV ] 연산 시간 측정, TickMeter 클래스 또는 getTickCount() 와 getTickFrequency() 함수 사용 (0) | 2022.08.18 |
OpenCV ] setTo(), copyTo() 함수와 마스크 연산 (0) | 2022.08.18 |
OpenCV ] 데이터 파일 입출력 (0) | 2022.08.18 |
OpenCV ] 트랙바 (슬라이더 컨트롤) 사용하기 (0) | 2022.08.18 |