CvArr—>CvMat—>IplImage
在OpenCV中没有vector结构,只有列矩阵。
1 cvMat* cvCreateMat(int rows, int cols, int type); //新建一个二维矩阵
type在这里可以是任何预定义的类型,预定义结构为 CV_<bit_length>(S|U|F)C<numbers_of_channels>,例如CV_32FC1,CV_8UC3。
1 //CvMat结构:矩阵头 2 typedef struct CvMat{ 3 int type; 4 int step; 5 int* refcount; //仅英特尔使用 6 union{ 7 uchar* ptr; 8 short* s; 9 int* i; 10 float* f1; 11 double* db; 12 }data; 13 union{ 14 int rows; 15 int heights; 16 }; 17 union{ 18 int cols; 19 int width; 20 }; 21 }CvMat;
1 //创建一个指定行和列,数据类型的矩阵 2 CvMat* cvCreateMat(int rows, int cols, int type); 3 4 //仅创建矩阵头,不为数据分配内存 5 CvMat* cvCreateMatHeader(int rows, int cols, int type); 6 7 //用已经存在的CMat结构初始化矩阵头 8 CvMat* cvInitMatHeader( 9 cvMat* mat, 10 int rows, 11 int cols, 12 int type, 13 void* data = NULL, 14 int step = CV_AUTOSTEP 15 ); 16 17 //类似cvInitMatHeader(),但是为CMat分配了内存 18 CvMat cvMat( 19 int rows, 20 int cols, 21 int type, 22 void* data = NULL 23 ); 24 25 //用现有矩阵创建一个新的矩阵 26 CvMat* cvCloneMat(const CvMat* mat); 27 28 //释放矩阵,包括矩阵头和数据 29 void cvReleaseMat(CvMat** mat);
1 #include "cv.h" 2 3 int main(int argc, char** argv) 4 { 5 float vals[] = {0.866025, -0.500000, 0.500000, 0.866025}; 6 7 CvMat rotmat; 8 9 cvInitMatHeader( 10 &rotmat, 11 2, 12 2, 13 CV_32FC1, 14 vals 15 ); 16 return 0; 17 }
原文:http://www.cnblogs.com/chan20160228/p/5226250.html