기본 클래스 종류
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 |