웬만한 클래스는 전부 사칙연산이 가능한가보다. 그러므로 앞으로 사칙연산예기는 안하것음(귀차나)..ㅋㅋㅋㅋ


그럼 본격적으로 시작해보면!


Size_ 클래스!   말그대로 Size! 크기! 크기를 나타내는 함수이다!  Size2i, Size, Size2f 등이있다는데 우리는 Size만 쓸것이다! 왜냐? Size하나 익숙하게 해놓고 나중에 필요하면 찾아서 응용하면되니깐~


항상 패턴이 일정할거 같은데,,,,, 함수 설명잠깐하고 바로 소스로 넘어갈것 같다.


소스보자!


1
2
3
4
5
6
7
8
9
10
11
12
13
#include<opencv.hpp>
using namespace std;
using namespace cv;
int main(void)
{
    Size size1(100100), size2(200200);
    cout<<"Size1 = "<<size1<<endl;
    cout<<"Size2 = "<<size2<<endl;
    
    if(size1 == size2)
        cout<<"same!"<<endl;
    return 0;
}
cs


결과는?


1
2
3
size1 = (100100)
size2 = (200200)
 
cs


결과를 내가 직접 손으로 작성하기때문에 컴퓨터가 출력해주는 결과와 괄호모양이 다를수도있고 띄어쓰기도 다를수 있으니깐 유의하세요!! 숫자는 안바뀔것이요!!!!


size1을 100x100으로 설정하고 size2는 200x200으로 설정해놓은거에요

그리고 10번줄을 보면 같은지 보고있는데 둘이 크기가 다르니 출력x !


또 끝임.. 초반엔 너무쉬운듯하지만 잘복습해두시길! 나중에 많이 사용하니깐!!!!!

다음엔 사각형인 Rect_함수를 설명해줄께요!!! 빠빠

 

'OpenCV' 카테고리의 다른 글

Scalar_ 클래스  (0) 2016.12.07
Rect_ 클래스  (0) 2016.12.07
Point3_ 클래스  (0) 2016.12.07
Point_ 클래스  (0) 2016.05.07
DataType 클래스  (0) 2016.05.07

우리는 당연히 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

DataType    기본 탬플릿 클래스

Point_      2D points의 템플릿 클래스

Point3_     3D points의 템플릿 클래스

Size_       영상 또는 사각형의 크기 템플릿 클래스

Rect_       2D 사각형 템플릿 클래스

RotatedRect 회전 가능한 사각형. (CVBox2D)

TermCriteria반복 알고리즘에서 종료 조건 클래스

Matx        작은 크기의 행렬

Vec         짧은 수치 벡터

Scalar_     4-요소 벡터

Range       시퀀스의 부분 시퀀스(slice)

Ptr         스마트 참조 포인터

Mat         행렬 클래스

 

 

많이쓰일것이니 잘보길바람!

'OpenCV' 카테고리의 다른 글

Point_ 클래스  (0) 2016.05.07
DataType 클래스  (0) 2016.05.07
opencv 히스토그램 그리기  (0) 2016.03.20
opencv 원그리기  (0) 2016.03.20
opencv 선,사각형 그리기  (0) 2016.03.20

오늘 할거는 히스토그램 그리는건데여, 히스토그램..만만치 않습니다... 갑자기 이렇게 어려운거로 건너뛰기를 한 이유는... 그냥!!


히스토그램은 관찰 데이터의 빈도수를 막대그래프로 표시한것으로 확률 밀도정도를 표시할수잇다. 그냥 얼마나 그러한색상이 모여잇고 복잡한가 정도를 나타내는 것이에요! 그렇다면...!!


항상그래왔듯이 소스 보시죠!


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
 
#include "opencv.hpp"
using namespace std;
using namespace cv;
void histogram(int histSize, float valueRange[], const float*ranges[], int channels, int dims)
{
    Mat srcImage = imread("lena.jpg", IMREAD_GRAYSCALE);
    if (srcImage.empty())
        return;
    Mat hist;
    calcHist(&srcImage, 1, &channels, Mat(), hist, 1, &histSize, ranges);
 
    Mat histImage(512512, CV_8U);
    normalize(hist, hist, 0, histImage.rows, NORM_MINMAX, CV_32F);
 
    histImage = Scalar(255);
    int binW = cvRound((double)histImage.cols / histSize);
    int x1, y1, x2, y2;
    for (int i = 0; i < histSize; i++)
    {
        x1 = i*binW;
        y1 = histImage.rows;
        x2 = (i + 1)*binW;
        y2 = histImage.rows - cvRound(hist.at<float>(i));
        rectangle(histImage, Point(x1, y1), Point(x2, y2), Scalar(0), -1);
    }
    imshow("histImage", histImage);
}
int main()
{
    int histSize[10= {128,256,512};
    float valueRange[] = { 0256 };
    const float * ranges[] = { valueRange };
    int channels = 0;
    int dims = 1;
    for (int i = 0; i < 3; i++)
    {
        histogram(histSize[i], valueRange, ranges, channels, dims);
        waitKey();
    }
 
    return 0;
}
cs



보시면 처음보는게 많습니다. calcHist라든가 normalize라든가 cvRound... histImage.cols... 

그래도 다알려줄게!


calcHist 이함수는 영상의 히스토그램값을 계산하는 함수라는데... 그냥 히스토그램 그리기위한 준비단계 제일처음!

별로 설명해줄게 없음...


normalize함수는 hist를 NORM_MINMAX로 범위가 [0,histimage,rows]가 되도록해서 히스토그램 최소값은 0, 최대값은 histimage.row로 해놓는 함수임. NORM_MINMAX 이건 상수에요! opencv에서 정해놓은 속성을 그냥 가져다 쓰는거임.


cvRound 는 정수형으로 변환할때 반올림을 하기위해서 쓰는거임. 반올림 무시해버리면 안되는거죠~ 쉬운개념이죠!





for (int i = 0; i < histSize; i++)

    {
        x1 = i*binW;
        y1 = histImage.rows;
        x2 = (i + 1)*binW;
        y2 = histImage.rows - cvRound(hist.at<float>(i));
        rectangle(histImage, Point(x1, y1), Point(x2, y2), Scalar(0), -1);
    }


이건 걔산된 히스토그램을 막대로 보이게 하기위해서 설정하는것임.




이렇게하면 히스토그램이 그냥나와버리네요. 제가 히스토그램 그리는걸 함수로 따로 해놓은 이유는 히스토그램 막대기 갯수를 다르게 해보고싶어서엿어용.


히스토그램 사용하는곳은 물체비교! 손인식에도 쓸수 잇죠! 등등 예시는 많이는 모르겟어요...ㅋㅋ;; 메마른 지식.



음 일단이걸로 히스토그램은 마치구.. 나중에 히스토그램 나올때 설명 더 자세히 하도록하구 다음포스트에서 봅시다@@ 



'OpenCV' 카테고리의 다른 글

DataType 클래스  (0) 2016.05.07
opencv의 기본 클래스!!  (0) 2016.05.06
opencv 원그리기  (0) 2016.03.20
opencv 선,사각형 그리기  (0) 2016.03.20
OPENCV 시작!!  (0) 2016.03.20

이번엔 원을 그려볼껀데염

그냥 도형그리는건 다똑같나봄. 함수인자들이..


소스@@

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()
{
    Mat dstImage(1024,1024, CV_8UC3, Scalar(255255255));
    rectangle(dstImage, Point(100100), Point(10001000), Scalar(00255));
    line(dstImage, Point(550100), Point(5501000), Scalar(00255));
    line(dstImage, Point(100550), Point(1000550), Scalar(00255));
    circle(dstImage, Point(500550), 512, Scalar(02550), -1);
    imshow("DstImage", dstImage);
    waitKey();
    return 0;
}
 
cs


실행결과@@




사진 크기를 줄이는 방법을 생각해봅시다.


저번시간에 이거 설명 안한거같은데

Mat dstImage(1024,1024, CV_8UC3, Scalar(255255255));



여기서 1024 1024 는 가로세로 크기를 말하구요. 그래서 작게 만들고 싶으면 1024를 512,256,128 등등으로 바꿔주심되여.

scalar역시 색상이구요 (255,255,255)는 흰색이에요 0,0,0 해보시면 까맣게 되뿌림..ㅋㅋ


circle(dstImage, Point(500550), 512, Scalar(02550), -1);



circle함수는 직선하구 사각형하고는 약간다르네여. Point가 하나임!! 이유는??

당연히 중심은 하나뿐이니까여! 512라고 적어둔것은 반지름입니다 ㅎㅎ 크기줄이려면 512저부분을 줄여야 하구요!


그럼 원 설명 끝났음 ㅋㅋㅋㅋㅋㅋㅋ 간단간단!! ㅋㅋ


다음포스트에서 봅세!


'OpenCV' 카테고리의 다른 글

DataType 클래스  (0) 2016.05.07
opencv의 기본 클래스!!  (0) 2016.05.06
opencv 히스토그램 그리기  (0) 2016.03.20
opencv 선,사각형 그리기  (0) 2016.03.20
OPENCV 시작!!  (0) 2016.03.20

이번엔 하아얀 종이에 선과 사각형을 그릴껀데욤.. 


opencv에선 그리기 쉽게! 함수로 만들어 줬네요. 감사!


일단 소스!

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()
{
    Mat dstImage(512512, CV_8UC3, Scalar(255255255));
    rectangle(dstImage, Point(100100), Point(400400), Scalar(20119165), 2);
    line(dstImage, Point(400100), Point(100400), Scalar(02550));
    line(dstImage, Point(400100), Point(100400), Scalar(02550), 281);
    rectangle(dstImage, Point(400 / 2100 / 2), Point(1002.400 / 2), Scalar(25500));
    imshow("Test",dstImage);
    waitKey();
    return 0;
}
cs


바로 결과보시죠!





음 일단 함수설명을 하자면


rectangle() 이함수는 누가봐도 사각형 그리기 함수죠?


여기서 dstImage는 그림을 그릴 판이구요, 첫번째 Point는 왼쪽위 점을 찍어주고, 두번쨰 Point는 오른쪽 아래 점을 찍어주는겁니다. 

점두개만 있으면 사각형 그릴수가 있죠~ c해보신분들은 아실겁니다 ㅎㅎ(c안하고 opencv를 하기는 좀 힘들죠,,?ㅋㅋ)


대망의 Scalar ,, 이건 색상정해주는거에요! RGB 물리1에 나오죠.... (공부한티내기)


이로써 dstImage에 사각형이 나오게 됩니다!!(짝짝짝)


그러면 line함수를 볼까여


line함수의 dstImage 는 사각형 그릴떄와 같은 판이구요


역시나 Point도 똑같은거구요...


Scalar역시 똑같음....


둘이 그냥똑같아보이지만 다른점을 굳이 뽑자면 그림이 다르게 나온다는것...과 Point두개 잡는건 두개가 똑같은데

rectangle은 사각형을 잡고 line은 선분을 그리는? 그런 느낌적인 느낌을 느낄수있음..


imshow()는 이미지 쑈()  => 이미지를 보여달라! 이뜻임.. 별거아니구!


waitKey() 요거는... 만약 내가 원하는게 실행되고 바로꺼지면 의미없죠?? 그래서 꺼지지말구 기다리라고 해둔거에요. 

사진나오고 엔터 누르면 꺼질껍니다!


return0은 당연히 종료..ㅋㅋ


요정도면 설명 다한거같아요! 어려운거 있으면 댓글로 달아주세요 아는선에서 다알려드릴게염.

맞다 가끔가다가 시옷 하나씩 빼먹는데... 예를 들면 있다(o)->잇다(x) 이것처럼.. 쉬프트 안눌린거 지웟다 쓰기 귀찮아서이니 이해해주세욤!!


다음포스트에서 봅시다@



'OpenCV' 카테고리의 다른 글

DataType 클래스  (0) 2016.05.07
opencv의 기본 클래스!!  (0) 2016.05.06
opencv 히스토그램 그리기  (0) 2016.03.20
opencv 원그리기  (0) 2016.03.20
OPENCV 시작!!  (0) 2016.03.20

opencv 처음입니다...ㅋㅋ 어떻게 시작해야할지를 모르겟음 ㅋㅋ


음... 일단 세팅하는건 다른블로그 검색하면 무지막지하게 나오니깐 패스@@


아 맞다! 그리고 버전이 맞아야 돌아가는게 있고 안맞아도 돌아가는게 있긴 하던데..


저는 opencv 버전 3.0 씁니당 만약 소스적용안되면 3.0이 아니어서일수도잇고 ..뭐..소스코드에러일수도 있고... 


책보면서 하는거라서 소스코드 틀릴일 절때 없음!!! (인간은 실수를 합니다,,)


그럼 일단 기본베이스부터 시작할께욤...


일단 소스 뿌리기!!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include "opencv.hpp"
using namespace std;
using namespace cv;
 
int main()
{
    Mat img = imread("lena.jpg");
 
    if (img.empty())
        return -1;
 
    imshow("Test", img);
 
    waitKey();
    return 0;
}
 
cs


많이들 아시는....ㅋㅋㅋ lena!!! 왜 이사람 사진인진 몰라도 200x년 때 책 에도 lena사진으로 되있음..

opencv 고정멤버(?) 인가봄. 버전이 바뀌어도 사람은 안바뀜 ㅋㅋ;;


결과@@





잘나오네요@@ 다음탄에서 봅시다@@@@@@@@@

뭔가 금방끝나넹...초반이라 그런감...ㅋ;


'OpenCV' 카테고리의 다른 글

DataType 클래스  (0) 2016.05.07
opencv의 기본 클래스!!  (0) 2016.05.06
opencv 히스토그램 그리기  (0) 2016.03.20
opencv 원그리기  (0) 2016.03.20
opencv 선,사각형 그리기  (0) 2016.03.20


app-debug.apk


'Android' 카테고리의 다른 글

액티비티간 정보 전달  (0) 2015.10.25
매인 서브 액티비티간 이동(upgrade)  (0) 2015.10.25
진동+토스트+로그인 폼.  (0) 2015.10.25

+ Recent posts