본문 바로가기
런닝머신 (ML)

[컴퓨터 비전 & 머신러닝] Open CV 기본 자료형 클래스

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)]
}

rc3, rc4
rc3 &amp; rc4

 
 


 

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 생성
}

rr1
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