본문 바로가기

IT

OpenCV Point_ 클래스

OpenCV는 컴퓨터 비전에서 주로 사용되는 자료형 클래스를 지원하고 있습니다.

먼저 픽셀의 좌표를 표현하는 Point_ 클래스에 대해 알아봅니다.

 

 

픽셀의 좌표 나타내기 : Point_ 클래스

 

Point_  클래스는 2차원 좌표평면의 점을 나타내는 템플릿 클래스입니다. 

따라서 좌표평면의 x와 y 변수를 가지게 됩니다.

 

선언하기

Point_ 클래스는 다음과 같이 정의되어 있습니다.

각 경우마다 초기화 값이 다르게 지정되기 때문에 원하는 case에 맞게 선언하여 사용할 수 있습니다.


Point_();                                 // 초기화 : x=0, y=0 

Point_(_Tp _x, _Tp _y);        // 초기화 : x=_x, y=_y
Point_( const Point_& pt);    // 초기화 : x=pt.x, y=pt.y

실제 프로그램으로 나타내면 다음과 같습니다.

Point pt1;                 // pt1 = (0,0)
pt1.x = 5;                 // pt1 = (5,0)
pt1.y=15;                 // pt1 = (5,15)
Point pt2(15, 35);    // pt2 = (15,35)

 

자료형 재정의하기

템플릿 클래스이기 때문에 x, y 변수가 실제 사용할 때 어떤 자료형으로 표현되는지는 반드시 명시해 주어야 합니다.

매번 프로그래밍을 할때 마다 좌표 변수에 대한 자료형을 명시하는 것이 불편하기 때문에

OpenCV에서는 주로 사용하는 자료형에 대해 클래스 이름을 재 정의하여 제공하고 있습니다.

typedef Point_<int>        Point2i;  //정수형
typedef Point_<int64>    Point2l;   
typedef Point_<float>     Point2f; //float 형
typedef Point_<double> Point2d;
typedef Point2i                 Point;

점의 좌표를 int형으로 나타낼 경우 Point2i 클래스를 사용하고

실수 형태로 나타낼 경우 Point2f를 사용하면 됩니다.

OpenCV는 주로 사용하는 형태가 정수형이기 때문에 Poin2i를 Point로 사용하고 있습니다.

 

Point_ 클래스 멤버함수

Point_ 클래스는 일반적인 4칙 연산을 수행할 수 있으며

Point_ 클래스가 가지는 고유의 멤버 함수를 다음과 같이 제공하고 있습니다.

  • dot( Point_ )   : 두점 사이의 내적 (dot product)를 return
  • ddot( Point_ ) : 두점 사이의 내적 (dot product)를 double형으로 return
  • cross( Point_ ) : 두점 사이의 외적(cross product)를 return
  • inside( Rect_ r ) : 점의 좌표가 사각형 r 영역 안에 있으면  TRUE로 return
Point pt3 = pt1 + pt2;        // pt3 = [20, 50]
Point pt4 = pt 1 * 4;          // pt4 = [10,30]
int dotcal = pt1.dot(pt2);   // dotcal = 600 (pt1과 pt2의 내적)

cout << "pt3: " << pt3 << endl;
cout << "pt4: " << pt4 << endl;
cout << "dotcal : " << dotcal << endl;

+와 * 등의 사칙연산의 경우는  x변수는 x변수끼리, y 변수는 y변수끼리 사칙 연산을 수행합니다.

 

OpenCV에서 제공하는 자료형 클래스는  C++ 표준 출력을 지원하기 때문에

cout과 <<  연산자를 이용하여 변수 값을 확인할 수 있습니다.

 


이상으로 OpenCV의 Point_ 클래스에 대해 확인하였습니다.

2차원 좌표 평면에서 ( x, y ) 를 표현하는데 유용한 클래스입니다.

도움이 되셨기를 바랍니다.

 

 

 

'IT' 카테고리의 다른 글

OpenCV Size_ 클래스  (0) 2023.05.18
OpenCV 개발툴 - Visual Studio 2019  (0) 2023.05.17
OpenCV 설치 및 빌드하기 (window버젼)  (0) 2023.04.12
OpenCV 빌드를 위한 CMake 설정  (0) 2023.04.11
Python URL 쉽게 다루기  (0) 2023.02.10