一、矩阵还可以做很多事情
由前面的章节可知,矩阵类的成员函数可以进行很多基本的操作。然而,除此以外,也有很多操作被表示为“友元”函数,它们的输入为矩阵类型,或者输出为矩阵类型,或者输入输出同为矩阵类型。这些函数及其参数将在表5-1介绍。
函数名称 | 描述 |
---|---|
cv::abs() | 计算矩阵中所有元素的绝对值 |
cv::absdiff() | 计算两个矩阵差值的绝对值 |
cv::add() | 实现两个矩阵逐元素相加 |
cv::addWeighted | 实现两个矩阵逐元素加权求和(alpha blending) |
cv::bitwise_and | 计算两个矩阵逐元素按位与 |
cv::bitwise_not | 计算两个矩阵逐元素按位非 |
cv::bitwise_or | 计算两个矩阵逐元素按位或 |
cv::bitwise_xor | 计算两个矩阵逐元素按位异或 |
cv::calcCovarMatrix() | 计算一组n维向量的协方差 |
cv::cartToPolar() | 计算二维向量的角度和幅度 |
cv::checkRange() | 检查矩阵的无效值 |
cv::compare() | 对两个矩阵中的所有元素应用所选择的比较运算符 |
cv::completeSymm() | 通过将一半元素复制到另一半来使矩阵对称 |
cv::convertScaleAbs() | 缩放矩阵,取绝对值,然后转换为8位无符号数 |
cv::countNonZero() | 计算矩阵中非零元素个数 |
cv::arrToMat() | 将2.1版本的矩阵类型转换为cv::Mat |
cv::dct() | 计算矩阵的离散余弦变换 |
cv::determinant() | 计算方阵的行列式 |
cv::dft() | 计算矩阵的离散傅里叶变换 |
cv::divide() | 实现两个矩阵逐元素相除 |
cv::eigen() | 计算方阵的特征值和特征向量 |
cv::exp() | 实现矩阵的逐元素求指数幂 |
cv::extractImageCOI() | 从2.1版本的矩阵类型中提取单个通道 |
cv::flip() | 绕选定的轴翻转矩阵 |
cv::gemm() | 实现广义矩阵乘法 |
cv::getConvertElem() | 获取单像素类型转换函数 |
cv::getConvertScaleElem() | 获取单像素类型的转换和缩放函数 |
cv::idct() | 计算矩阵的离散余弦逆变换 |
cv::idft() | 计算矩阵的离散傅里叶逆变换 |
cv::inRange() | 测试矩阵的元素是否再两个其他矩阵的值之间 |
cv::invert() | 求方阵的逆 |
cv::log() | 计算矩阵逐元素的自然对数 |
cv::magnitude() | 计算二维向量的幅度 |
cv::LUT() | 将矩阵转换为查找表的索引 |
cv::Mahalanobis() | 计算两个向量之间的马氏距离 |
cv::max() | 计算两个矩阵逐元素的最大值 |
cv::mean() | 计算矩阵元素的平均值 |
cv::meanStdDev() | 计算矩阵元素的均值和和标准差 |
cv::merge() | 将多个单通道矩阵合并成一个多通道矩阵 |
cv::min() | 计算两个矩阵逐元素的最小值 |
cv::minMaxLoc() | 在矩阵中寻找最小值和最大值 |
cv::mixChannels() | 打乱从输入矩阵到输出矩阵的通道 |
cv::mulSpectrums() | 计算两个傅里叶谱的逐元素乘积 |
cv::multiply() | 计算两个矩阵的逐元素乘积 |
cv::mulTransposed() | 计算矩阵和矩阵的转置的乘积 |
cv::norm() | 计算两个矩阵的归一化相关系数 |
cv::normalize() | 将矩阵中的元素标准化到某一数值内 |
cv::perspectiveTransform() | 实现一系列向量的透视矩阵变化 |
cv::phase() | 计算二维向量的方向 |
cv::polarToCart() | 已知角度和幅度,求出对应的二维向量 |
cv::pow() | 对矩阵内的每个元素求幂 |
cv::randu() | 用均匀分布的随机数填充给定的矩阵 |
cv::randn() | 用正态分布的随机数填充给定的矩阵 |
cv::randShuffle() | 随机打乱矩阵元素 |
cv::reduce() | 通过特定的操作将二维矩阵缩减为向量 |
cv::repeat() | 将一个矩阵的内容复制到另一个矩阵 |
cv::saturate_cast<>() | 转换原始类型(模板函数) |
cv::scaleAdd() | 逐元素计算两个矩阵的和并且第一个矩阵可以选择缩放 |
cv::setIdentity() | 将矩阵中对角线上的元素设为1,其他置0 |
0cv::solve() | 求出线性方程的解 |
cv::solveCubic() | 找到(唯一的)三次方程的解 |
cv::solvePoly() | 找到多项式方程的复根 |
cv::sort() | 在矩阵中排序任意行或列的元素 |
cv::sortIdx() | 与cv::sort()的目的相同,除了矩阵是未修改的,并返回索引 |
cv::split() | 将一个多通道矩阵分割成多个单通道矩阵 |
cv::sqrt() | 计算矩阵逐元素的平方根 |
cv::subtract() | 实现两个矩阵逐元素相减 |
cv::sum() | 对矩阵中的所有元素求和 |
cv::theRNG() | 返回随机数生成器 |
cv::trace() | 计算一个矩阵的迹 |
cv::transform() | 在矩阵的每个元素上应用矩阵变换 |
cv::transpose() | 矩阵的转置运算 |
具体使用实例可自行百度。
二、小结
在本章中,我们介绍了利用OpenCV最重要的矩阵结构cv::Mat可以完成的大量基本操作,包括矩阵、图像、和多维矩阵等。