OpenCV 学习笔记---基本数据类型


points, size, rectangle 和 Scalar 三元组的结构

结构
成员
意义
CvPointint x, y图像中的点
CvPoint2D32ffloat x, y二维空间中的点
CvPoint3D32ffloat x, y, z三维空间中的点
CvSizeint width, height图像的尺寸
CvRectint x, y, width, height图像的部分区域
CvScalardouble val[4]RGBA










构造函数跟类型名相同,区别在于首字母小写。这些构造函数只是内联函数。

cvScalar 有 3 个构造函数
1. cvScalar()     一个、两个、三个、或者四个参数,并将这些参数传递给数组 val[ ] 中相应的元素。
2. cvRealScalar()     一个参数,传递给 val[0] ,val[ ] 数组中其它元素被赋为 0 。
3. cvScalarAll() 一个参数,将 val[ ] 中的四个元素均设为此参数的值。

CvMat 结构:矩阵头

typedef	struct	CvMat {
	int	type;				//  类型 CV_<bit_depth>(S|U|F)C<number_of_channels>
	int	step; 				// 以字节为单位的行数据长度
	int*	refcount; 			// for internal use only
	union{					// data 指针,4 种类型
		uchar*		ptr;
		short*		s;
		int*		i;
		float*		fl;
		double*		db;
	}data;
	union{					// 行数/高度
		int		rows;
		int		height;
	};
	union{					// 列数/宽度
		int		cols;
		int 		width;
	};
} CvMat;

此类信息通常被称作矩阵头。很多程序是区分矩阵头和数据体的, 数据体是各个 data 成员所指向的内存位置。

矩阵的创建与释放

// create a new rows by cols matrix of type 'type'
CvMat* cvCreateMat(int rows,int cols,int type);

// create only matrix header without allocating data
Cvmat* cvCreateMatHeader(int rows,int cols,int type);

// initialize header on existing CvMat structure
CvMat* cvInitMatHeader(CvMat* mat,int rows,int cols,int type,void* data = NULL,int step = CV_AUTOSTEP);

// like cvinitmatheader() but allocate CvMat as well
CvMat cvMat(int rows,int cols,int type,void* data = NULL);

// allocate a new matricx just like the matrix 'mat'
CvMate* cvCloneMat(const CvMat* mat);

// free the matrix 'mat', both header and data
void cvReleaseMat(CvMat** mat);

用固定数据创建一个 OpenCV 矩阵

// create an OpenCV Matrix containing some fixed data
float vals[] = {0.866025,-0.500000,0.500000,0.866025};

CvMat rotmat;

cvInitMatHeader(&rotmat,2,2,CV_32FC1,vals);

创建矩阵后,可以对它的简单操作有查询数组定义和数据访问等

int cvGetElemType(const CvArr* arr); // 返回整型常数,表示存储在数组里的元素类型(CV_8UC1 和 CV_64FC4 等类型)

int cvGetDims(const CvArr* arr,int* sizes = NULL); // 返回维数,如果 sizes 不为空,它将存储对应维度的矩阵大小(元素个数)

下面的例子,计算总的元素个数
int sizes[CV_MAX_DIM];
int i, total = 1;
int dims = cvGetDims(arr, size);
for(i = 0; i < dims; i++ ) // 每个维度上的矩阵大小(元素个数)相乘
    total *= sizes[i];

int cvGetDimSize(const CvArr* arr,int index); // 返回指定维数上矩阵的大小(元素个数)

矩阵数据的存取

简单方法 ---- 两个宏: // 只适用于 1 维或 2 维数组

// 4 个参数:矩阵、待返回元素的类型、行号和列号
CV_MAT_ELEM()

CvMat* mat = cvCreateMat(5,5,CV_32FC1);
float element_3_2 = CV_MAT_ELEM(*mat, float, 3,2);

// 3 个参数:矩阵、待返回元素的行号和列号。函数返回指向这个元素的指针
// 如需同时读取和设置数据,可直接调用此宏,并将指针转化成恰当类型
CV_MAT_ELEM_PTR()

CvMat* mat = cvCreateMat(5,5,CV_32FC1);
float element_3_2 = 7.7;
*((float*)CV_MAT_ELEM_PTR(*mat,3,2)) = element_3_2;

这些宏在每次调用的时候都重新计算指针。在计划顺序访问矩阵中的所有元素时,这种方法的缺点尤为突出





 
 














深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值