ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 기본 데이터 타입
    Programming/OpenCV 2015. 3. 27. 20:45


    OpenCV는 자체적인 기본 데이터 타입을 가진다.
    C언어에서 제공하는 기본 데이터 타입이 아니라 OpenCV에서 새로 정의한 구조체 형식의 데이터 타입을 의미한다.


    좌표, 크기, 사각형, 4차원 스칼라 벡터에 대한 구조체 정의

     
    구조체 멤버 생성자 함수 용도
    CvPoint int x, y cvPoint() 영상 내 한 점의 위치
    CvPoint2D32f float x, y cvPoint2D32f() 2차원 실수 공간에서의 좌표
    CvPoint3D32f float x, y, z cvPoint3D32f() 3차원 실수 공간에서의 좌표
    CvSize int width, height cvSize() 영상의 크기
    CvRect int x, y, width, height cvRect() 영상의 일부 영역
    CvScalar double val[4] cvScalar()
    cvRealScalar()
    cvScalarAll()
    RGB값

    cvScalar() - 네 개의 인자를 받아 val[] 배열에 지정

    cvRealScalar() - 하나의 인자를 받아 val[0]으로 설정, 나머지 값(val[1], val[2], val[3])은 모두 0으로 설정

    cvScalarAll() - 하나의 인자를 받아 이를 val[] 배열의 모든 원소에 동일하게 대입



    ex)
    #include "cv.h"
    #include "highgui.h"
    
    int main()
    {
    
    	CvPoint pt0 = cvPoint(10, 20);
    	CvPoint2D32f pt1 = cvPoint2D32f(30.0, 40.0);
    	CvPoint2D64f pt2 = cvPoint2D64f(50.0, 60.0);
    
    	printf("pt0 : %d, %d\n", pt0.x, pt0.y);
    	printf("pt1 : %f, %f\n", pt1.x, pt1.y);
    	printf("pt2 : %f, %f\n", pt2.x, pt2.y);
    
    	CvScalar color1 = cvScalar(255, 255, 255);
    	CvScalar color2 = cvScalar(255);
    	CvScalar color3 = cvRealScalar(255);
    	CvScalar color4 = cvScalarAll(255);
    
    	printf("color1.val: %f, %f, %f, %f\n", color1.val[0], color1.val[1], color1.val[2], color1.val[3]);
    	printf("color2.val: %f, %f, %f, %f\n", color2.val[0], color2.val[1], color2.val[2], color2.val[3]);
    	printf("color3.val: %f, %f, %f, %f\n", color3.val[0], color3.val[1], color3.val[2], color3.val[3]);
    	printf("color4.val: %f, %f, %f, %f\n", color4.val[0], color4.val[1], color4.val[2], color4.val[3]);
    
    	return 0;
    }
    
    결과
    pt0 : 10, 20
    pt1 : 30.000000, 40.000000
    pt2 : 50.000000, 60.000000
    color1.val: 255.000000, 255.000000, 255.000000, 0.000000
    color2.val: 255.000000, 0.000000, 0.000000, 0.000000
    color3.val: 255.000000, 0.000000, 0.000000, 0.000000
    color4.val: 255.000000, 255.000000, 255.000000, 255.000000
    


    ex) 좌측 상단(5, 10) 우측 하단(20, 30)인 흰 사각형


    cvRectangle(
    	myImg,
    	cvPoint(5, 10);
    	cvPoint(20, 30);
    	cvScalar(255, 255, 255);
    }
    

    ex) CvSize, CvRect

    #include "cv.h"
    #include "highgui.h"
    
    int main()
    {
    	CvSize size = cvSize(720, 480);
    	CvRect rect = cvRect(100, 100, 400, 200);
    	CvPoint pt1, pt2;
    
    	printf("size : %d, %d\n", size.width, size.height);
    
    	pt1.x = rect.x;
    	pt1.y = rect.y;
    
    	pt2.x = rect.x + rect.width;
    	pt2.y = rect.y + rect.height;
    
    	printf("Left Top Point(p1) : %d, %d\n", pt1.x, pt1.y);
    	printf("Right Bottom Point(p2) : %d, %d\n", pt2.x, pt2.y);
    	return 0;
    }
    
    결과
    size : 720, 480
    Left Top Point(p1) : 100, 100
    Right Bottom Point(p2) : 500, 300


    행렬과 영상 타입

    IplImage는 흔히 '영상'이라고 부르는 것을 표현하는 데이터 타입이다.


    OpenCV는 C 언어로 구현되었지만 OpenCV 구조체는 객체지향적 구조이다. 

    즉, IplImage는 CvMat에서 상속되었고 CvMat은 CvArr로부터 상속된 구조를 갖는다.




    'Programming > OpenCV' 카테고리의 다른 글

    cvSplit, cvMerge, cvFlip  (0) 2015.04.14
    IplImage 구조체  (0) 2015.04.12
    CvMat 행렬 구조체  (0) 2015.03.27
    동영상 재생  (0) 2015.03.27
    정지 영상 출력  (0) 2015.03.21

    댓글

Designed by Tistory.