우리는 당연히 1차원이 아닌 2차원부터 시작하므로 Point_에 숫자가 없더라도 2차원 좌표를 표현한다고 생각해야한다. 1x를 그냥 x로 표현하듯이...(표현이 적절한가..?)

아무튼!! 그렇다면 Point3_ 클래스는 당연히 3차원을 표현해 줄 것이다.

물론 연산자 사용 가능이다. 무슨소리냐면 Point3_클래스끼리 사칙연산이 된다는 소리임!

소스로 보는게 편하니깐 봅시다.


1
2
3
4
5
6
7
8
9
10
11
12
#include<opencv.hpp>
using namespace std;
using namespace cv;
int main(void)
{
    Point3f pt1(1.0f, 0.0f, 0.0f), pt2(0.0f, 1.0f, 0.0f);
    cout<<"pt1" = <<pt1<<endl;    
    cout<<"pt1" = <<pt1<<endl;
    if(pt1 != pt2)
        cout<<"Different pt1, pt2"<<endl;
    return 0;
}
cs


결과는?


1
2
3
pt1 = [100]
pt2 = [010]
Different pt1, pt2
cs


Point3f pt1(1.0f, 0.0f, 0.0f)에서 1.0f, 0.0f, 0.0f 이것들은 각각 x, y, z를 지칭하는 거에요. 참쉽죠?

pt1 과 pt2 내용물이 달라서 연산결과는 false -> 따라서 출력이 되구요.


끝인데......



다음엔 Size_클래스 알려줄께여~


 

'OpenCV' 카테고리의 다른 글

Rect_ 클래스  (0) 2016.12.07
Size_ 클래스  (0) 2016.12.07
Point_ 클래스  (0) 2016.05.07
DataType 클래스  (0) 2016.05.07
opencv의 기본 클래스!!  (0) 2016.05.06

요즘 클래스에 대해서 글을 적고있긴한데 나도 지식이 부족하다보니 책에 의존하는 경향이 있긴하다. 하지만 내가 이해한것을 바탕에 두고 부족한 부분이나 애매한 부분을 책에 의존하고 있기 때문에 생초보들도 보고 따라하면 이해는 갈 것이다.(안갈수도..ㅠㅠ)


뭐가 됫든간에 이번엔 Point_ 클래스에 대해 알아볼 것이다. 


저어번 포스트에 Point_클래스는 2D좌표를 표현하는 클래스라고 적어놓은것이 있다. (한번씩 보고오길 바람. 웬만한 클래스는 다 적어놨어요.)


다들 C언어 하실때 typedef 구조체 정의하시는거 배우셧죠??? (C언어 배우고 opencv를 해야 이해하기 편합니당. 안배우셨다면 약간 힘드실수도..) 그 typedef 를 사용하여 정의한 Point2i.,Point, Point2f, Point2d 자료형이 있답니다. 거기서 제생각엔 point를 제일 많이 사용하는거 같기도 해요.. 물론 내 생각..

이 자료형들로 +,-,*,=,==,!= 등의 연산자를 사용할수 있어요!


소스보시죠!


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include "opencv.hpp"
using namespace std;
using namespace cv;
int main()
{
    Point2f pt1(0.1f, 0.2f), pt2(0.3f, 0.4f);
    
    Point pt3 = (pt1 + pt2)*10.0;
    
    cout << "pt1:" << pt1 << endl;
    cout << "pt2:" << pt2 << endl;
    cout << "pt3:" << pt3 << endl;
 
 
    cout << "pt1(" << pt1.x << "," << pt1.y << ")" << endl;
    cout << "pt2(" << pt2.x << "," << pt2.y << ")" << endl;
    cout << "pt3(" << pt3.x << "," << pt3.y << ")" << endl;
 
    if (pt1 == pt2)    cout << "1,2 same" << endl;
    else cout << "1,2 different" << endl;
 
    return 0;
}
cs



결과보시죠!


1
2
3
4
5
6
7
8
9
pt1:[0.1, 0.2]
pt2:[0.3, 0.4]
pt3:[4, 6]
pt1(0.1,0.2)
pt2(0.3,0.4)
pt3(4,6)
1,2 different
 
 
cs









제가 가끔가다가 메인함수 안에 freopen("output.txt","w",stdout);

이걸 쓸때도 있고 안쓸때도있는데 이유가 결과를 여기다가 올리려고 output 텍스트 파일에 결과를 받아적는거에요. 그래서 있던없던 프로그램 내용엔상관없으니 혼동하지마셔요! 


결과로 돌아와서 Point pt1 이라고 변수를 선언하고 pt1 적은다음 pt1바로 옆에 점을 하나 찍으면 x좌표를 사용할수도 있고 y좌표를 사용할 수도 있습니다. 연산도 가능하다는거 잊지마시고!

 point_ 이 클래스는 2차원이다!! 알아두셔요!!!!! 끝!

'OpenCV' 카테고리의 다른 글

Size_ 클래스  (0) 2016.12.07
Point3_ 클래스  (0) 2016.12.07
DataType 클래스  (0) 2016.05.07
opencv의 기본 클래스!!  (0) 2016.05.06
opencv 히스토그램 그리기  (0) 2016.03.20

일단 datatype 클래스에 대해 설명을 하면 opencv기본 자료형을 표현하기 위한  템플릿클래스이다. 

 뭔소리냐면... CV_8U , CV_8UC3 이런거다! 나중에가면 많이보게 될 것이니 걱정 No.

 또 CV_8U , CV_8UC3 이게 뭔소리냐면.... 그냥 상수이다. 고정된 수라고 하지요.


나중에 프로그래밍 할때 보면 알겠지만  datatype 을 CV_8U , CV_8UC3 이렇게 쓰지 아무도 DataType<Vec<uchar, 3>>::type 요따구로 쓰지않음.. 귀찮기 때문에!


 datatype을 사용한 코드를 보자!


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include "opencv.hpp"
using namespace std;
using namespace cv;
int main()
{
    freopen("output.txt""w", stdout);
    Mat img(12, DataType<uchar>::type);
    // Mat imag(1,2,CV_8U);
    img.at<uchar>(00= 1
    img.at<uchar>(01= 2;
    cout << "img" << img << endl;
     
    return 0;
}
 
cs

 이렇긴 한데 사용하기 편리한 CV_8U 이런걸 내비두고 그 누가 DataType<uchar>::type 이것을 사용하겠는가!

무튼 여기선 더이상 설명할게 없다.

하나만알아두자! CV_8U 이런건 상수이니 보고서 쫄지말자!

'OpenCV' 카테고리의 다른 글

Point3_ 클래스  (0) 2016.12.07
Point_ 클래스  (0) 2016.05.07
opencv의 기본 클래스!!  (0) 2016.05.06
opencv 히스토그램 그리기  (0) 2016.03.20
opencv 원그리기  (0) 2016.03.20

+ Recent posts