摘要 : 此次实验主要是了解矩阵创建的方式以及获取矩阵的相关属性,通过实验达到访问其类型,维度等属性的目的。
关键词 :cvGreateMat() cvGetDims() cvGetElemType()
1.创建矩阵的方式:
(1):cvGreateMat(int rows,int cols,int type).Type可以使用任何定义类型;
Type:CV_(S|U|F)(其中bit_depth代表数据位数,S:有符号整数, U:无符号整数
F:浮点)
For exemple:CvMat*mat=cvGreateMat(8,9,CV_32FC1);// 创建一个八行九列的32位浮点型单通道
(2):CvGreateMatHeader()函数创建CvMat结构体,不分配数据内存,由cvGreateData()函数分配数据需要的数据内存。
For exemple: CvMat*mat=cvGreateMat(8,8,CV_32FC1);
cvGreateMatHeader(mat);
2.获取矩阵的相关属性
(1)cvGetElemType() :数据类型
(2)cvGetDims():返回指定数组的维数并可以返回每一个维数的大小。如果数组sizes非空,那么大小将被写入sizes。如果使用了参数sizes,它应该是一个n个整数的指针,这里的n指维数。若不明确n的大小,可把sizes大小指定为CV_MAT_DIM。
(3)CvGetDimSize():返回一个由index参数指定的某一维的大小。
(4):cvGetSize():它与cvGetDims()密切相关,cvGetDims()返回一个数组的大小。主要的不同是cvGetSize()是专门为矩阵和图像设计的,这两种对象的维数总是2。
3.实验操作
#include"cv.h"
#include"highgui.h"
int main(int argc, char*argv[])
{
CvMat*mat = cvCreateMat(7, 8, CV_32FC3);//创建一个矩阵
int type = cvGetElemType(mat);//获取矩阵的类型
printf("矩阵的类型是:");//输出矩阵的类型
printf("%d\n", type);
int sizes[3] = { 0 };
int dims = cvGetDims(mat, sizes);//获取矩阵维度和每一维度上的大小
printf("矩阵的维度是:");
printf("%d\n", dims);
printf("矩阵每一维度的大小分别是:");
printf("%d %d\n", sizes[0], sizes[1]);//输出每一维度上的大小
int number = cvGetDimSize(mat, 1);
printf("矩阵第二维的大小是:%d\n",number);
return 0;
}
运行结果如下图所示:
参考文献:《学习opencv(中文版)》P
74-75