Point_클래스
2차원 평면 위에 있는 점의 좌표를 표현하는 템플릿이다.
2차원 좌표를 나타내는 x와 y라는 이름의 멤버 변수를 가지고 있다.
template<typename _Tp> class Point_
{
public:
Point_(); // Point 의 기본 생성자로 x = 0, y = 0으로 초기화
Point_(_Tp _x, _Tp _y); // (_x, _y) 좌표를 인자로 받는 생성자로, x = _x, y = _y로 초기화
Point_(const Point_& pt); // 복사 생성자로, x - pt.x, y = pt.y 로 초기화
Point_& operator = (const Point_& pt); // 대입 연산자 재정의
_Tp dot(const Point_& pt) const; // Point::dot() 멤버 함수는 두 점 사이의 내적(dot product)을 계산하여 반환
double ddot(const Point_& pt) const; // Point::ddot() 멤버 함수는 두 점 사이의 내적을 실수형으로 계산하여 double 자료형으로 반환
double cross(const Point_& pt) const; // Point::cros() 멤버 함수는 두 점 사이의 외적(cross product)을 반환
bool inside(const Rect_<_Tp>& r) const; // Point::inside() 멤버 함수는 점의 좌표가 사각형 r 영역 안에 있으면 true 반환
...
_Tp x, y;
};
typedef Point_<int> Point2i; /*
typedef Point_<int64> Point2l; Point_ 클래스 이름 재정의
typedef Point_<float> Point2f;
typedef Point_<double> Point2d;
typedef Point2i Point; */
Point_ 클래스는 템플릿 클래스이기 때문에 실제로 사용할 때에는 어떤 자료형으로 좌표를 표현할 것인지 명시해야 한다.
하지만, 클래스를 사용할 때마다 자료형을 명시하는 것이 다소 번거로울 수 있어 자주 사용하는 자료형에 대하여 이름을 재정의 하여 제공한다.
특히 정수형 좌표를 표현하는 경우가 많기 때문에 Point2i 클래스는 좀 더 간편한 Point 이름으로 다시 재정의 되어있다.
즉, OpenCV 소스 코드에서 Point 클래스는 2차원 정수 좌표계에서 좌표를 표현하는 자료형이다.
2차원 정수 좌표계 표현 방법
Point pt1; // pt1 = (0, 0)
pt1.x = 5; pt1.y = 10; // pt1 = (5, 10)
Point pt2(10, 30); // pt2 = (10, 30)
pt1은 기본 생성자를 사용하여 생성했고, 후에 멤버 변수 pt1.x와 pt1.y는 0으로 초기화된다.
그러므로 기본 생성자로 생성된 변수 pt1은 (0, 0)좌표를 나타낸다. 후에 pt1.x에 5를, pt1.y에 10을 대입했으므로
pt1 변수가 (5, 10) 좌표를 나타낸다.
pt2 변수는 생성과 동시에 초기화를 하였으므로 pt2는 (10, 30) 좌표를 나타낸다.
Point_ 클래스의 산술 연산
Point pt1(5, 10); // [5, 10]
Point pt2(10, 30); // [10, 30]
Point pt3 = pt1 + pt2; // [15, 40]
Point pt4 = pt1 * 2; // [10, 20]
int D1 = pt1.dot(pt2); // 350
bool B1 = (pt1 == pt2); // false
Point 객체 끼리의 덧셈 연산을 하면 각각 x, y 끼리 좌표를 더하여 더한 값으로 새로운 좌표를 생성한다.
pt1[5, 10] + pt2[10, 30] = pt3[15, 40]
Point 객체에 곱셈 연산을 하면 x, y 각각의 값이 곱해진다.
pt1[5, 10] * 2 = pt4[10, 20]
D1에 할당되는 dot()함수는 두 점의 내적을 계산하는 멤버 함수이다
두 점의 내적은 x좌표끼리 곱한 값에 y 좌표끼리 곱한 값을 더하여 계산한다.
[5, 10], [10, 30] 이므로 5x10 + 10x30 = 350이 된다.
B1에는 pt1과 pt2가 다르므로 false가 할당된다.
OpenCV에서 제공하는 대부분의 자료형 클래스는 C++ 표준 출력을 지원한다.
그러므로 std::cout 함수를 이용하여 Point_ 객체의 좌표를 쉽게 출력할 수 있다.
std::cout << "pt1 : " << pt1 << std::endl;
std::cout << "pt2 : " << pt2 << std::endl;
'DevelopmentTool > OpenCV' 카테고리의 다른 글
[OpenCV] Rect_ 클래스 (0) | 2022.11.16 |
---|---|
[OpenCV] Size_ 클래스 (0) | 2022.11.16 |
[OpenCV] Visual Studio - OpenCV 환경 설정 (0) | 2022.11.16 |
[OpenCV] 주요 모듈 (0) | 2022.11.16 |
[OpenCV] OpenCV란 (0) | 2022.11.16 |