본문 바로가기
Studynote/Computer Science 12

Chapter_02_1_CvPoint_CvScalar_CvSize_CvRect

by e.sunie 2018. 11. 3.

Chapter 02. OpenCV C API 자료구조

 

 

 

 

OpenCV에서 제공하는 자료구조는 typeder문과 struct로 정의 ,

cxtypes.h 해더파일에 정의

CXCORE 부분에 설명


기본적 자료구조와 그의 인라인 함수에 대해 설명

-인라인 함수 : 자료형의 초기화를 위한 함수

 

1.CvPoint, CvScalar, CvSize, CvRect

(1) CvPoint, CvPoint2D32f, CvPoint2D64f, 


영상 : 행렬형태의 2차원 화소 (pixel)들의 집합

각 화소 or 2차원 점의 좌표 표현 : CvPoint, CvPoint2D32f, CvPoint2D64f 구조체 사용

화소의 밝기 값 or 컬러 값 표현 : CvScalar


* 행렬 (CvMat)과 영상 (IplImage)에서의 좌표계

-왼쪽 상단 : 원점


CvPoint 자료구조

typedefstructCvPoint

{

intx;

inty;

}CvPoint;


typedefstructCvPoint2D32f

{

floatx;

floaty;

}CvPoint2D32f;


typedefstructCvPoint2D64f

{

doublex;

doubley;

}CvPoint2D64f;


CvPoint 인라인 함수

CV_INLINE CvPoint cvPoint(intx,inty)

{

CvPoint p;

p.x=x;

p.y=y;

returnp;

}


CV_INLINE CvPoint2D32f cvPoint2D32f(doublex,doubley)

{

CvPoint2D32f p;

p.x=(float)x;

p.y=(float)y;

returnp;

}


CV_INLINE CvPoint2D64f cvPoint2D64f(doublex,doubley)

{

CvPoint2D64f p;

p.x=x;

p.y=y;

returnp;

}


(2) CvScalar

화소의 밝기 값 or 컬러 값 표현

그레이 스케일 영상 : val[0]

컬러영상 :

val[0] = B

val[1] = G

val[2] = R

val[3] = alpha


CvScalar 자료구조

typedefstructCvScalar

{

doubleval[4];

}CvScalar;

CvScalar 인라인 함수

CV_INLINE CvScalar CvScalar(doubleval0,doubleval1 CV_DEFAULT(0),

doubleval2 CV_DEFAULT(0),

doubleval3 CV_DEFAULT(0) )

{

CvScalar scalar;

scalar.val[0]=val0; scalar.val[1]=val1;

scalar.val[2]=val2; scalar.val[3]=val3;

returnscalar;

}


CV_INLINE CvScalar CvRealScalar(doubleval0)

{

CvScalar scalar;

scalar.val[0]=val0;

scalar.val[1]=scalar.val[2]=scalar.val[3]=0;

returnscalar;

}


CV_INLINE CvScalar CvScalarAll(doubleval0123)

{

CvScalar scalar;

scalar.val[0]=val0123;

scalar.val[1]=val0123

scalar.val[2]=val0123

scalar.val[3]=val0123;

returnscalar;

}


CvScalar 자료형을 위한 인스턴스 생성 인라인 함수는 3가지이다 .

 

  • cvScalar : 4개의 인수 , val0은 반드시 초기화 나머지는 자동 0으로 초기화
  • cvRealScalar : 1개의 채널 영상일 때 편리 ~ 그레이스케일 영상
  • cvScalarAll : 하나의 인수을 입력받아 크기가 4인 배열에 동일값으로 초기화

 

- Real이 포함된 함수 : 채널이 1인 영상 or 행렬에서 사용하는 함수


CvPoint, CvPoint2D32f, CvPoint2D64f

#include<iostream>

#include<opencv2/opencv.hpp>


intmain()

{

CvPointpt0 =cvPoint(10,20);

CvPoint2D32fpt1 =cvPoint2D32f(30.0,40.0);

CvPoint2D64fpt2 =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);

return0;

}

pt0 : 10, 20

pt1 : 30.000000, 40.000000

pt2 : 50.000000, 60.000000

Program ended with exit code: 0


CvScalar

#include<iostream>

#include<opencv2/opencv.hpp>


intmain()

{

CvScalarcolor1 =cvScalar(255,255,255);

CvScalarcolor2 =cvScalar(255);

CvScalarcolor3 =cvRealScalar(255);

CvScalarcolor4 =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]);

return0;

}

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

Program ended with exit code: 0


(3)CvSize, CvRect


CvSize : 영상 및 영역의 크기 표현 자료구조

typedefstruct

{

intwidth;

intheight;

}CvSize;


CV_INLINE CvSize CvSize(intwidth,intheight)

{

CvSize s;

s.width=width;

s.height=height;

returns;

}



CvRect : 사각형을 위한 자료구조

typedefstructCvRect

{

intx;

inty;

intwidth;

intheight;

}CvRect;


CV_INLINE CvRect cvRect(intx,inty,intwidth,intheight)

{

CvRect r;

r.x=x;

r.y=y;

r.width=width;

r.height=height;

returnr;

}


CvSize, CvRect와 인스턴스 생성 함수

#include<iostream>

#include<opencv2/opencv.hpp>


intmain()

{

CvSizesize =cvSize(720,480);

CvRectrect =cvRect(100,100,400,200);

CvPointpt1, 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);

return0;

}

size : 720, 480

Left Top Point(p1) : 100, 100

Right Bottom Point(p2) : 500, 300

Program ended with exit code: 0



'Studynote > Computer Science 12' 카테고리의 다른 글

Chapter_02_3_IplImage 영상 자료구조  (0) 2018.11.03
Chapter_02_2_CvMat 행렬 자료구조  (0) 2018.11.03
Chapter_01_OpenCV_개요  (0) 2018.11.03
Skill Tree  (0) 2017.12.26
<RC>Ch06_Inference  (0) 2017.11.30

댓글