기본 클래스
OpenCV에서 연산의 주체가 되는 클래스이다.
기본 클래스 종류
Vec
Point_
Point3_
Size_
Rect_
RotatedRect
Scalar_
기본 클래스 훑어보기
# Vec<typename _Tp, int n>
_Tp 자료형의 데이터를 n개 담을 수 있는 클래스이다.
고정배열이라고 생각하면 편하다.
Vec<int, 2> vec = {3, 4}; cout << vec[0] << '\n'; //! 3이 출력된다. cout << vec[1] << '\n'; //! 4가 출력된다.
# Point_<typename _Tp>
2차원 평면 좌표를 가르키는 클래스이다.
각 좌표는 _Tp 자료형으로 주어져야 한다.
Point_<int> point(2, 3); cout << point << '\n'; //! [2, 3]이 출력된다.
# Point3_<typename _Tp>
3차원 공간 좌표를 가르키는 클래스이다.
각 좌표는 _Tp 자료형으로 주어져야 한다.
Point3_<double> point(1.1, 2.2, 3.3); cout << point << '\n';
# Size_<typename _Tp>
2차원 도형의 크기를 가르키는 클래스이다.
크기를 나타낼 뿐, 아직 사각형은 아님에 주의하자.
Size_<int> size(1, 2); cout << size << '\n'; //! [1 x 2]가 출력된다.
# Rect_ <typename _Tp>
사각형을 가르키는 클래스이다.
/** * (0, 1)에서 시작하는 [5 x 6] 크기의 사각형. */ Point_<int> top_left(0, 1); Size_<int> size(5, 6); Rect_<int> rect(top_left, size); cout << rect << '\n'; //! [5 x 6 from (0, 1)]이 출력된다.
# RotatedRect
회전된 사각형을 가르키는 클래스이다.
항상 float 원소만 받는다.
/** * (0, 1)에서 시작하는 [5 x 6] 크기의 사각형을, * (0, 1)을 중심으로 20도 만큼 시계방향으로 회전시킨 사각형. */ Point_<float> top_left(0, 1); Size_<float> size(5, 6); float angle = 20; RotatedRect rect(top_left, size, angle);
# Scalar_<typename _Tp>
하나의 화소를 가르키는 클래스.
내부적으로 4개의 숫자로 구성되어 있으며,
각각 bgr + alpha 값으로 되어있다. (rgb가 아니다..!)
초기화 하지 않은 값은 0으로 설정된다.
Scalar_<int> pixel(0, 100, 200, 1); //! bgr + alpha cout << pixel[0] << '\n'; //! blue 0 cout << pixel[1] << '\n'; //! green 100 cout << pixel[2] << '\n'; //! red 200 cout << pixel[3] << '\n'; //! alpha 1
기본 클래스 축약
위에서 자료형을 기술할 때 마다, 타입이름을 길게 써주는 것은 귀찮다.
아래처럼 숫자와 알파벳 한글자로 짧게 표현할 수 있도록, 미리 정의되어 있다.
using Vec2i = Vec<int, 2>; using Vec4f = Vec<float, 4>;
# 숫자 영역
내부적인 데이터의 개수.
# 알파벳 영역
i -> int32
l -> int64
f -> float
d -> double
b -> unsigned char
s -> short
w -> unsigned short
# Vec<T, n>
/** @name Shorter aliases for the most popular specializations of Vec<T,n> @{ */ typedef Vec<uchar, 2> Vec2b; typedef Vec<uchar, 3> Vec3b; typedef Vec<uchar, 4> Vec4b; typedef Vec<short, 2> Vec2s; typedef Vec<short, 3> Vec3s; typedef Vec<short, 4> Vec4s; typedef Vec<ushort, 2> Vec2w; typedef Vec<ushort, 3> Vec3w; typedef Vec<ushort, 4> Vec4w; typedef Vec<int, 2> Vec2i; typedef Vec<int, 3> Vec3i; typedef Vec<int, 4> Vec4i; typedef Vec<int, 6> Vec6i; typedef Vec<int, 8> Vec8i; typedef Vec<float, 2> Vec2f; typedef Vec<float, 3> Vec3f; typedef Vec<float, 4> Vec4f; typedef Vec<float, 6> Vec6f; typedef Vec<double, 2> Vec2d; typedef Vec<double, 3> Vec3d; typedef Vec<double, 4> Vec4d; typedef Vec<double, 6> Vec6d; /** @} */
# Point_<T>
자주 사용되는 Point2i는 간략히 Point로 부른다.
2차원 평면 좌표를 다루기 때문에 2가 붙었다.
typedef Point_<int> Point2i; typedef Point_<int64> Point2l; typedef Point_<float> Point2f; typedef Point_<double> Point2d; typedef Point2i Point;
# Point3_<T>
typedef Point3_<int> Point3i; typedef Point3_<float> Point3f; typedef Point3_<double> Point3d;
# Size_<T>
자주 사용되는 Size2i는 Size로 부른다.
typedef Size_<int> Size2i; typedef Size_<int64> Size2l; typedef Size_<float> Size2f; typedef Size_<double> Size2d; typedef Size2i Size;
# Rect_<T>
자주 사용되는 Rect2i는 Rect로 부른다.
2차원 사각형을 다루기 때문에 2가 붙었다.
typedef Rect_<int> Rect2i; typedef Rect_<float> Rect2f; typedef Rect_<double> Rect2d; typedef Rect2i Rect;
# RoatedRect
RotatedRect는 항상 float만 다루기 때문에 축약형이 없다.
# Scalar_<T>
자주 쓰이는 Scalar_<double>을 Scalar로 부른다.
축약형이 한 개밖에 없다.
typedef Scalar_<double> Scalar;
다양한 생성 방법
# Point_
Point2f a(Vec2f(1.0, 3.0)); Point2f b(Size2f(1.0, 3.0)); Point2f c(1.0, 3.0); Point2f d(c);
# Point3_
Point3f a(Vec3f(1.0, 3.0, 5.0)); Point3f b(1.0, 3.0, 5.0); Point3f c(a);
# Size_
Size2f a(Vec2f(1.0, 3.0)); Size2f b(Point2f(1.0, 3.0)); Size2f c(1.0, 3.0); Size2f d(c);
# Rect_
Rect2f a(Point2f(0.0, 1.0), Size2f(4.0, 5.0)); Rect2f b(Point2f(0.0, 1.0), Point2f(4.0, 6.0)); Rect2f c(0.0, 1.0, 4.0, 5.0); Rect2f d(c);
'# 미사용 > 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 |