기본 클래스 종류
OpenCV에서 기본적인 연산의 주체는 다음과 같다.
Vec
Point_
Point3_
Size_
Rect_
RotatedRect
Scalar_
Vec 클래스 활용
Vec 클래스는 다음과 같이 활용될 수 있다.
길이가 같은 Vec 끼리 더하기.
자료형이 다른 Vec 으로 변환하기.
Vec의 각 요소에 일정 값으로 곱하거나 나누기.
//! 길이가 같은 Vec 끼리 더하기.
Vec3i a1 = {1, 2, 3};
Vec3i a2 = {3, 2, 1};
Vec3i a3 = a1 + a2; //! [4, 4, 4]
//! 다른 자료형 Vec 으로 변환하기.
Vec3f b1 = {1.1, 2.2, 3.3};
Vec3i b2 = (Vec3i)b1; //! [1, 2, 3]
//! 일정 값으로 곱하거나 나누기.
Vec3i c1 = {4, 5, 6};
Vec3i c2 = c1 * 2; //! [8, 10, 12]
Vec3i c3 = c1 / 2; //! [2, 2, 3]
Point_ 클래스 활용
Point_ 클래스는 다음과 같이 활용될 수 있다.
외적과 내적 구하기.
주어진 사각형에 안에 있는지 검사하기.
객체간 덧셈 뺄셈.
스칼라 곱셈 나눗셈.
자료형이 다른 Point_로 변환하기.
//! 외적과 내적 구하기.
Point2f a1 = {3, 4};
Point2f a2 = {5, 6};
float inner_product = a1.dot(a2); //! (39.0) 내적의 반환형은 _Tp
double outer_product = a1.cross(a2);//! (-2.0) 외적의 반환형은 double
//! 어떤 사각형 안에 있는지 검사하기.
Point2i b1 = {3, 4};
cout << b1.inside(Rect(0, 0, 3, 4)) << '\n'; //! false
cout << b1.inside(Rect(0, 0, 9, 9)) << '\n'; //! true
//! 객체간 덧셈 뺄셈.
Point c1 = {2, 3};
Point c2 = {3, 4};
Point c3 = c1 + c2; //! [5, 7]
Point c4 = c1 - c2; //! [-1, -1]
//! 스칼라 곱셈 나눗셈.
Point d1 = {3, 5};
Point d2 = d1 * 2; //! [6, 10]
Point d3 = d1 / 2; //! [1, 2]
Point3_ 클래스 활용
Point3_ 클래스는 다음과 같이 활용될 수 있다.
내적 구하기.
주어진 사각형에 안에 있는지 검사하기.
곱셈 나눗셈을 통해 확대/축소하기.
자료형이 다른 Point3_로 변환하기.
Point3f a = {3, 4, 5};
Point3f b = {5, 6, 7};
//! 내적 구하기.
float inner_product = a.dot(b); //! (74.0) 내적의 반환형은 _Tp.
double inner_product_2 = a.ddot(b); //! (74.0) 내적의 반환형은 double.
//! 객체간 덧셈 뺄셈.
Point3f add = a + b;//! [8, 10, 12]
Point3f sub = a - b;//! [-2, -2, -2]
//! 스칼라 곱셈 나눗셈.
Point3f mul = a * 2.0; //! [6, 8, 10]
Point3f div = a / 2.0; //! [1.5, 2, 2.5]
Size_ 클래스 활용
Size_ 클래스는 다음과 같이 활용될 수 있다.
크기 구하기.
객체간 덧셈 뺄셈.
자료형이 다른 Size_로 변환하기.
Size2f a = {4, 1.5};
Size2f b = {2, 4.5};
//! 크기 구하기.
float size = a.area(); //! (6.0) 반환형은 _Tp.
//! 객체간 덧셈 뺄셈.
Size2f sum = a + b; //! [6 x 6]
Size2f sub = a - b; //! [2 x -3]
Rect_ 클래스 활용
Rect_ 클래스는 다음과 같이 활용될 수 있다.
왼쪽 위 좌표 구하기.
오른쪽 아래 좌표 구하기.
Size 형태로 크기 객체 구하기.
_Tp 형태로 넓이 구하기.
어떤 좌표가 사각형 안에 들어있는지 검사하기.
평행 이동하기.
크기 확장하기.
두 Rect와 겹치는 최대 Rect 구하기.
두 Rect를 포함하는 최소 Rect 구하기.
자료형이 다른 Rect_로 변환하기.
Rect rect = {Point(0, 0), Size(5, 5)};
//! 왼쪽 위, 오른쪽 아래 좌표 구하기.
Point top_left = rect.tl();//! [0, 0]
Point btm_right = rect.br();//! [5, 5]
//! 넓이 구하기.
Size size = rect.size();//! [5 x 5]
int area = rect.area();//! 25
//! 어떤 좌표가 사각형 안에 들어있는지 검사하기.
rect.contains(Point(5, 5)); //! false.
Rect_ 간의 최대 공통 영역과 최소 포함 영역은,
다음 그림처럼 구해진다.

RotatedRect 클래스 활용
Rect_ 클래스는 다음과 같이 활용될 수 있다.
중심점 좌표 구하기.
꼭지점 좌표 구하기.
회전각 구하기.
해당 회전 사각형을 포함하는 최소 Rect 구하기.
RotatedRect rr = {Point(5, 5), Size(4, 5), 20};
//! 중심점 좌표 구하기.
Point2f center = rr.center; //! [5, 5]
//! 회전각 구하기.
float angle = rr.angle; //! 20;
//! 꼭지점 좌표 구하기.
Point2f vertices[4];
rr.points(vertices);
/**
* [2.26556, 6.66519]
* [3.97567, 1.96673]
* [7.73444, 3.33481]
* [6.02433, 8.03327]
*/
//! 해당 회전 사각형을 포함하는 최소 Rect 구하기.
Rect bound = rr.boundingRect(); //! [7 x 9 from (2, 1)]
RoatedRect Bound

'# 미사용 > OpenCV' 카테고리의 다른 글
| [OpenCV] 벡터를 행렬로 변환 (0) | 2019.10.29 |
|---|---|
| [OpenCV] 행렬의 영역참조 (관심영역) (0) | 2019.10.29 |
| [OpenCV] 행렬의 생성 및 활용 (0) | 2019.10.29 |
| [OpenCV] 기본 클래스 생성 (0) | 2019.10.28 |
| [CLion OpenCV] Windows + CLion + OpenCV 설치하기 (0) | 2019.10.28 |