2차원 행렬을 위한 자료구조이다.
typedef struct CvMat
{
int type; //행렬 요소 자료형
int step;
/* for internal use only */
int* refcount;
int hdr_refcount;
union
{
uchar* ptr;
short* s;
int* i;
float* fl;
double* db;
} data;
#ifdef __cplusplus
union
{
int rows;
int height;
};
union
{
int cols;
int width;
};
#else
int rows;
int cols;
#endif
}
CvMat;
CvMat 행렬 생성 및 파괴
행렬의 헤더를 생성한다 : CvMat 구조체의 멤버변수를 초기화 한다.
1)CvMat* cvCreateMat(int rows, int cols, int type);
CV_8UC1과 같은 행렬요소의 자료형(type)을 이수로 주면, 행렬의 헤더를 생성하고, 행렬 요소를 저장하기 위한 메모리를 할당하여 포인터를 반환한다.
2)void cvReleaseMat(CvMat** mat);
행렬을 생성할 때 할당된 메모리를 해제한다. 2중 포인터에 주의
3)void cvSetReal2D(CvArr* arr, int idx(), int idx1, double value);
2차원 행렬(CvMat) 또는 영상(IplImage)포인터인 arr의 idx0 행, idx1 열의 요소 값에 value의 값을 저장한다.
1채널인 행렬 또는 영상에서만 사용할 수 있다.
:행렬, 영상 포인터를 받아 그 배열의 idx0열 idx1행에 value 값 저장.
4)double cvGetReal2D(const CvArr* arr, int idx0, int idx1);
2차원 행렬 또는 영상 포인트인 arr의 행 열의 "요소값"을 double형으로 반환한다.
1채널인 행렬 또는 영상에서만 사용 가능하다
5)CvArr 자료형(typedef void CvArr;)
서로 다른 자료형 사이에 형 변환을 위해 사용된다.
CvMat* 또는 IplImage* 형태의 인수를 전달 받는데 사용한다.
cvSetReal2D, cvGetReal2D 은 행렬 및 영상 모두에 사용할 수 있음에 주의
1채널은 Gray, 3채널은 3요소 영상(RGB,HSI,vCbCr)...을 말하겠지...
ex)