cvRound( ) 함수
영상 처리를 수행하다 보면 내부 연산은 실수를 사용하고, 최종적인 결과는 정수로 변환하는 경우가 종종 있습니다. 실수 값을 정수로 변환할 때는 주로 반올림을 사용하며, OpenCV에서는 실수 값의 반올림 연산을 위해 cvRound() 함수를 제공합니다. cvRound() 함수 원형은 다음과 같습니다.
int cvRound(double value); int cvRound(float value); |
|
• value |
입력 실수 값. 만약 value가 INT_MIN과 INT_MAX 사이를 벗어날 경우 알 수 없는 값이 반환됩니다. |
• 반환값 |
반올림한 정수 값 |
cvRound() 함수는 value 인자의 소수점 아래가 0.5보다 크면 올림을 수행하고, 0.5보다 작으면 내림을 수행합니다. 소수점 아래가 정확하게 0.5인 경우에는 가장 가까운 짝수로 반올림을 수행합니다.5 이외에도 OpenCV는 실수의 올림을 수행하는 cvCeil() 함수와 실수의 내림을 수행하는 cvFloor() 함수도 제공합니다. 참고로 cvRound(), cvCeil(), cvFloor() 함수는 cv 네임스페이스로 선언되지 않은 전역 함수입니다.
다음은 cvRound() 함수의 예제 코드입니다.
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;
앞 코드의 실행 결과는 다음과 같습니다.
cvRound(2.5): 2 cvRound(2.51): 3 cvRound(3.4999): 3 cvRound(3.5): 4
5 OpenCV의 반올림은 IEEE 754에 규정된 부동 소수형 연산을 따르며, 자세한 내용은 https://en.wikipedia.org/wiki/IEEE_754 #Rounding_rules 웹 사이트를 참고하기 바랍니다.