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

+ Recent posts