opencv视频学习第八课(CvMat结构体)笔记整理

10 篇文章 0 订阅
7 篇文章 0 订阅

视频教程的第七课是说opencv的基本结构体,我就默默的学习了,不记录下来了。现在来说说第八课吧,CvMat结构体。

对于mat这个类型,我从前单纯的觉得,它和数组差不多的。后来,经人指点才发现,mat那是矩阵啊,矩阵是一个多么神奇的存在。

大学那时,高代是一门让我喜爱的课程,因为老师很有趣,哈哈哈哈~但是高代中说到的各种证明,让我晕眩不已啊,也让我深深感受到,这个是一个神奇的存在。

在opencv中,cvMa的定义如下

typedef struct CvMat
{
	int type;
	//数据类型,通道数等组合的东西,格式是CV_<bit_depth> (S|U|F)C<number_of_channels>例如CV_32FC1(32位浮点型单通道)
	int step;//矩阵一行的字节数

	/* for internal use only */
	int* refcount;
	int hdr_refcount;
	
	//数据块,使用联合体
	union
	{
		uchar* ptr;
		short* s;
		int* i;
		float* fl;
		double* db;
	} data;
	//__cplusplus表示C++环境
	#ifdef __cplusplus
		union
		{
			int rows;
			int height;
		};
		union
		{
			int cols;
			int width;
		};
	#else
		int rows;
		int cols;
	#endif
} CvMat;


创建一个矩阵有几种方法

方法一、

使用cvCreateMat(int rows, int cols, int type);//创建矩阵

CvMat* pmat1;//占有空间在32位机器上四个字节的指针地址
pmat1 = cvCreateMat(8,9,CV_32FC1);//为pmat1动态分配空间,
cvReleaseMat(pmat1);


方法二、

先使用cvCreateMatHeader()创建矩阵头,再使用cvCreateData()创建矩阵数据

CvMat* pmat2
pmat2 = cvCreateHeader(4,5,CV_8UC1);//此时pmat2的没有数据块data
cvCreateData(pmat2);
cvReleaseMat(pmat2);


方法三、

已知一个数组,使用cvInitMatHeader()将数组转换成mat

float data[4] = {3,4,6,0};
CvMat pmat3;
cvInitMatHeader(&pmat3,2,2,CV_32FC1,data);//pmat3的data的地址与data的地址是一样的

方法四、

复制一个已知的cvMat数据

CnMat* pmat4;
pmat4 = cvCloneMat(pmat2);//pmat4和pmat2的空间是独立的
cvReleaseMat(pmat4);





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值