728x90
Point_ 클래스 : 2차원 평면 위에 있는 점의 좌표를 표현하는 템플릿 클래스
//기본 생성자, x=0 y=0 으로 초기화
Point_();
//x=_x y=_y 으로 초기화
Point_(TP _x, _TP _y);
//복사생성자, x=pt.x y=pt.y 으로 초기화
Point_(const Point_& pt);
//대입 연산자 재정의
Point_& operator = (const Point_& pt);
//dot() 함수 : 두 점 사이의 내적을 계산하여 반환
_TP dot(const Point_& pt) const;
//ddot() 함수 : 두 점 사이의 내적을 실수형으로 계산하여 double 자료형으로 반환
double ddot(const Point_& pt) const;
//cross() 함수 : 두 점 사이의 외적을 반환
double cross(const Point_& pt) const;
//cross() 함수 : 점의 좌표가 사각형 r 영역 안에 있으면 true 반환
bool inside(const Rect_<_TP>& r) const;
//x는 x축 좌표, y는 y축 좌표를 나타낸다
_TP x, y;
//int자료형에 의한 Point_클래스 이름 재정의
typedef Point_<int> Point2i;
void PointOp()
{
Point pt1; // pt1 = (0, 0)
pt1.x = 5; pt1.y = 10; // pt1 = (5, 10)
Point pt2(10, 30); // pt2 = (10, 30)
Point pt3 = pt1 + pt2; // pt3 = [15, 40]
Point pt4 = pt1 * 2; // pt4 = [10, 20]
int d1 = pt1.dot(pt2); // d1 = 350
bool b1 = (pt1 == pt2); // b1 = false
cout << "pt1: " << pt1 << endl; //출력결과 -> pt1 : [5, 10]
cout << "pt2: " << pt2 << endl; //출력결과 -> pt2 : [10, 30]
}
Size_ 클래스 : 영상 또는 사각형 영역의 크기를 표현하는 클래스
//기본 생성자, width=0 height=0 으로 초기화
Size_();
//width=_width height=_height 으로 초기화
Size_(_TP _width, _TP _height);
//복사 생성자, width=sz.width height=sz.height 으로 초기화
Size_(const Size_& sz);
//대입 연산자 재정의
Size_& operator = (const Size_& sz);
//사각형 크기에 해당하는 면적을 반환
_TP area() const;
//유효하지 않은 크기이면 ture를 반환
bool empty() const;
//width는 사각형 영역의 가로 크기, height는 사각형 영역의 세로 크기를 나타낸다
_TP width, height;
//int 자료형에 대한 Size_ 클래스 이름 재정의
typedef Size_<int> Size2i;
void SizeOp()
{
Size sz1, sz2(10, 20); // sz1 = [0 x 0], sz2 = [10 x 20]
sz1.width = 5; sz1.height = 10; // sz1 = [5 x 10]
Size sz3 = sz1 + sz2; // sz3 = [15 x 30]
Size sz4 = sz1 * 2; // sz4 = [10 x 20]
int area1 = sz4.area(); // area1 = 200
cout << "sz3: " << sz3 << endl; //출력 결과 -> sz3 : [15 x 30]
cout << "sz4: " << sz4 << endl; //출력 결과 -> sz4 : [10 x 20]
}
Rect_ 클래스 : 사각형의 위치와 크기 정보를 표현하는 클래스
//기본 생성자, 모든 멤버 변수를 0으로 초기화
Rect _();
// x=_x y=_y width=_width height=_height으로 초기화
Rect_(_Tp _x, _Tp _y, _Tp _width, _Tp _height);
//복사 생성자, x=r.x y=r.y width=r.width height=r.height으로 초기화
Rect_(const Rect_& r);
//좌측 상단 점의 좌표와 사각형의 크기 정보를 인자로 받는 생성자
Rect_(const Point_<Tp>& org, const Size_<Tp>& sz);
//사각형에서 서로 대각 위치에 있는 두 점의 좌표를 인자로 받는 생성자
Rect_(const Point_<Tp>& pt1, const Point_<Tp>& pt2);
//대입 연산자 재정의
Rect_& operator = (const Rect_& r);
//tl() 함수 : 사각형의 좌측 상단 점의 좌표 반환
Point_<_Tp> tl() const;
//br() 함수 : 사각형의 우측 하단 점의 좌표 반환
Point_<_Tp> br() const;
//size() 함수 : 사각형의 크기 정보를 반환
Size_<_Tp> size() const;
//area() 함수 : 사각형의 면적을 반환
_Tp area() const;
//empty() 함수 : 유효하지 않은 사각형이면 true를 반환
bool empty() const;
//contains() 함수 : 인자로 전달된 pt점이 사각형 내부에 있으면 true를 반환
bool contains(const Point_<_Tp>& pt) const;
//x, y는 사각형 좌측 상단 점의 좌표, width, height는 사각형의 가로와 세로 크기를 나타낸다
_Tp x, y, witdh, height;
//int 자료형에 대하여 Rect_ 클래스 이름 재정의
typedef Rect_<int> Rect2i;
void RectOp()
{
Rect rc1; // rc1 = [0 x 0 from (0, 0)]
Rect rc2(10, 10, 60, 40); // rc2 = [60 x 40 from (10, 10)]
Rect rc3 = rc1 + Size(50, 40); // rc3 = [50 x 40 from (0, 0)], 사각형 크기 변경
Rect rc4 = rc2 + Point(10, 10); // rc4 = [60 x 40 from (20, 20)], 사각형에 대한 평행이동
Rect rc5 = rc3 & rc4; // rc5 = [30 x 20 from (20, 20)], 사각형의 교차영역
Rect rc6 = rc3 | rc4; // rc6 = [80 x 60 from (0, 0)], 사각형의 포함역역
cout << "rc5: " << rc5 << endl; //출력 결과 -> rc5: [30 x 20 from (20, 20)]
cout << "rc6: " << rc6 << endl; //출력 결과 -> rc6: [80 x 60 from (0, 0)]
}
RortatedRect 클래스 : 회전된 사각형을 표현하는 클래스
//기본 생성자, 모든 멤버 변수를 0으로 초기화
RotatedRect();
//center=_center size=_size angle=_angle으로 초기화
RotatedRect(const Point2f& _center, const Size2f& _size, float _angle);
//인자로 전달된 세 점은 회전된 사각형의 세 꼭지점 좌표를 나타낸다
RotatedRect(const Point2f& _point1, const Point2f& _point2, const Point2f& _point3);
//points() 함수 : 회전된 사각형은 네 꼭지점 좌표를 pts 인자에 저장
void points(Point2f pts[]) const;
//boundingRect() 함수 : 회전된 사각형을 포함하는 최소 크기의 사각형 정보를 반환 (정수 단위)
Rect boundingRect() const;
//boundingRect2f() 함수 : 회전된 사각형을 포함하는 최고 크기의 사각형 정보를 반환 (실수 단위)
Rect_<float> boundingRect2f() const;
//사각형의 중심 좌표를 나타낸다
Point2f center;
//사각형의 크기를 나타낸다
Size2f size;
//시계 방향 회전 각도를 나타낸다
float angle;
void RotatedRectOp()
{
RotatedRect rr1(Point2f(40, 30), Size2f(40, 20), 30.f);
Point2f pts[4]; //네 꼭지 좌표 pts 배열에 저장
rr1.points(pts); //꼭지점 좌표 추출
Rect br = rr1.boundingRect(); //바운딩 박스 br 생성
}
Range 클래스 : 범위 또는 구간을 표현하는 클래스
Range(); //기본 생성자, start = end = 0으로 초기화
Range(int _start, int _end); //start=_start end=_end으로 초기화
int size() const; //size() 함수 : 범위 크기 반환
bool empty() const; //empty() 함수 : start와 end가 같으면 true 반환
static Range all(); //all() 함수 : start = INT_MIN, end = INT_MAX로 설정한 뒤 Range 객체를 반환
int start, end; //start는 범위의 시작, end는 범위의 끝을 나타낸다
void RangeOp()
{
Range r1(0, 10); //0 ~ 9까지
}
String 클래스 : 문자열 저장하고 처리하는 클래스
String format(const char* fmt, ...);
//fmt -> 형식 문자열
//... -> 가변 인자
void StringOp()
{
String str1 = "Hello";
String str2 = "world";
String str3 = str1 + " " + str2; // str3 = "Hello world"
bool ret = (str2 == "WORLD"); //false
Mat imgs[3];
for (int i = 0; i < 3; i++) {
String filename = format("data%02d.bmp", i + 1);
cout << filename << endl;
imgs[i] = imread(filename);
}
}
728x90
'런닝머신 (ML)' 카테고리의 다른 글
[컴퓨터 비전 & 머신러닝] InputArray와 OutputArray 클래스 (0) | 2023.03.20 |
---|---|
[컴퓨터 비전 & 머신러닝] Vec과 Scalar 클래스 (0) | 2023.03.20 |
[컴퓨터 비전 & 머신러닝] Open CV Mat 클래스 (0) | 2023.03.16 |
[컴퓨터 비전 & 머신러닝] Visual Studio OpenCV 설치 방법 및 주요 함수 (0) | 2023.02.21 |
[컴퓨터 비전 & 머신러닝] 나혼자 컴퓨터 비전 도전기 (0) | 2023.02.21 |