더북(TheBook)

Point_ 클래스는 다양한 연산자에 대해 연산자 재정의가 되어 있습니다. 그러므로 다음과 같은 코드를 이용하여 좌표 연산을 수행할 수 있습니다.

// pt1 = [5, 10], pt2 = [10, 30]
Point pt3 = pt1 + pt2;          // pt3 = [15, 40]
Point pt4 = pt1 * 2;            // pt4 = [10, 20]
int d1 = pt1.dot(pt2);          // d1 = 350
bool b1 = (pt1 = = pt2);        // b1 = false

이 코드에서 오른쪽에 주석으로 표시된 부분은 연산에 의해 생성되는 Point 객체의 좌표를 나타냅니다. 먼저 Point 객체끼리 덧셈 연산을 하면 x 좌표와 y 좌표를 각각 더하여 새로운 좌표를 생성합니다. 앞선 예제 코드에서 pt1은 (5, 10), pt2는 (10, 30) 좌표를 표현하고 있으므로, pt3에는 (15, 40) 좌표가 저장됩니다. 변수 pt4pt1에 정수 2를 곱한 결과이며, 이 경우 pt1의 x 좌표와 y 좌표에 각각 2를 곱하여 pt4에는 (10, 20) 좌표가 저장됩니다. Point::dot() 함수는 두 점의 내적을 계산하는 멤버 함수이며, 두 점의 내적은 x 좌표끼리 곱한 값에 y 좌표끼리 곱한 값을 더하여 계산합니다. 그러므로 d1에는 5×10+10×30=350이 저장됩니다. Point 객체끼리 = = 또는 != 연산자를 이용하여 두 점의 좌표가 서로 같은지 혹은 다른지를 검사할 수도 있습니다. 앞의 코드에서는 pt1pt2의 좌표가 서로 같지 않으므로 변수 b1에는 false가 저장됩니다.

OpenCV에서 제공하는 대부분의 자료형 클래스는 C++ 표준 출력을 지원합니다. 그러므로 std::cout<< 연산자를 이용하여 Point_ 객체의 좌표를 쉽게 출력할 수 있습니다. 다음은 pt1pt2 변수에 저장된 좌표를 화면에 출력하는 코드 예제입니다.

cout << "pt1: " << pt1 << endl;
cout << "pt2: " << pt2 << endl;

실제로 이 코드를 실행하면 콘솔 창에 다음과 같이 점의 좌표가 출력됩니다.

pt1: [5, 10]
pt2: [10, 30]

지금까지 Point_ 클래스의 정의와 사용 방법에 대해 알아봤습니다. Point_ 클래스에 대해 제대로 이해하였다면 이후에 나타나는 Size_, Rect_ 등 클래스도 어렵지 않게 이해할 수 있을 것입니다.

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