诊所网站建设,贵阳观山湖区网站建设,游戏制作器,企业管理公司随着OpenCV的发展#xff0c;封装了越来越多的功能#xff0c;而往往这些功能不是一个函数就能完成的#xff0c;实现为一组函数又会导致整个库的函数变得杂乱无章#xff0c;因此常常使用一个新的对象类型来实现这个新功能。通过重载operator()来生成对象或函数子。下面主…随着OpenCV的发展封装了越来越多的功能而往往这些功能不是一个函数就能完成的实现为一组函数又会导致整个库的函数变得杂乱无章因此常常使用一个新的对象类型来实现这个新功能。通过重载operator()来生成对象或函数子。下面主要讲述了三个新类型cv::PCA、cv::SVD和cv::RNG。
cv::PCA
主成分分析是一种降维的方法主要是通过分析多维分布从中提取出带有最多信息量的维度子集的方法这样在不损失太多精度的前提下可以扔掉较少信息的维度。
cv::PCA::PCA()
cv::PCA::PCA()
作用默认的构造函数简单的创建PCA对象并初始化空结构
cv::PCA::PCA(InputArray data, InputArray mean, int flags, int maxComponents0)
作用执行默认构造然后立即将它的参数传递给cv::PCA::operator()
cv::PCA::operator()
cv::PCA cv::PCA::operator()(InputArray data, InputArray mean, int flags, int maxComponents0)
作用生成PCA对象内部分布的模型。
参数
参数含义data一个包含所有构成样本分布的矩阵n采样D维mean包含每一维的平均值的矩阵flags指定data和mean的排布方式cv::PCA_DATA_AS_ROWdata是n×Dmean是n×1cv::PCA_DATA_AS_COLdata是D×nmean是1×nmaxComponents最大保留的成分维度数默认情况下都保留
cv::PCA::project()
cv::Mat cv::PCA::project(InputArray vec) const
void cv::PCA::project(InputArray vec, OutputArray result) const
作用将向量投影到主分量子空间。
cv::PCA::backProject()
cv::Mat cv::PCA::backProject(InputArray vec) const
void cv::PCA::backProject(InputArray vec, OutputArray result) const
作用根据PC投影重建向量。
cv::SVD
奇异值分解SVD本质上是解决非方阵、病态的不适定的或不良矩阵的工具。在数学上奇异值分解对于一个m×n的矩阵A的分解形式为 其中U是m×m的矩阵W是m×n的对角矩阵行和列下标不相等时设为0V是n×n的矩阵。
cv::SVD::SVD()
cv::SVD::SVD()
作用默认的构造函数简单的创建SVD对象并初始化空结构
cv::SVD::SVD(InputArray A, int flags0)
作用执行默认构造然后立即将它的参数传递给cv::SVD::operator()
cv::SVD::operator()
cv::SVD cv::SVD::operator(InputArray A, int flags0)
作用将需要分解的矩阵传递给cv::SVD对象矩阵A将被分为U、W和V的转置之后记作Vt。
flags的可取值值含义cv::SVD::MODIFY_A允许在计算时改变矩阵A的值cv::SVD::NO_UV不用显式的计算出矩阵U和Vtcv::SVD::FULL_UV不仅要计算出U和Vt而且要让它们是全尺寸的正交方阵
cv::SVD::compute()
void cv::SVD::compute(InputArray A, OutputArray W, OutputArray U, OutputArray Vt, int flags)
作用矩阵A将被分为U、W和Vt并将结果存放在用户提供的矩阵里。
cv::SVD::solveZ()
void cv::SVD::solveZ(InputArray A, OutputArray z)b
作用给定一个欠定的奇异线性系统该函数将会尝试找出一个单位长度的解然后放在矩阵z中。若没有找到则返回值将是使得值最小的向量。
原理
cv::SVD::backSubst()
void cv::SVD::backSubst(InputArray b, OutputArray x)
void cv::SVD::backSubst(InputArray W, InputArray U, InputArray Vt, InputArray b, OutputArray x)
作用执行奇异值反向替换。
原理形式一 形式二
cv::RNG
随机对象RNG用来产生随机数的伪随机序列。一旦随机数发生器创建就会开始按需提供产生随机数的“服务”无论是平均分布Multiply with CarryMWC算法还是正态分布Ziggurate算法。
cv::theRNG()
cv::RNG cv::theRNG(void)
作用为调用它的线程返回一个默认的随机数生成器。
cv::RNG()
cv::RNG::RNG(void)
cv::RNG::RNG(uint64 state)
作用使用默认的构造函数来创建一个RNG对象或者传递一个64位的无符号整型数这个数将用来作为随机数序列的种子。
cv::RNG::operator T()其中T是数据类型
cv::RNG::operator uchar()
cv::RNG::operator schar()
cv::RNG::operator ushort()
cv::RNG::operator short int()
cv::RNG::operator int()
cv::RNG::operator unsigned()
cv::RNG::operator float()
cv::RNG::operator double()
作用重载类型转换操作符可以把RNG对象转换成任何想要的类型。
注当产生浮点数的时候它们的范围始终是[0.0, 1.0)。
cv::RNG::operator()
unsigned int cv::RNG::operator()()
作用返回一个从[0, UINT_MAX)均匀采样的随机整数。
unsigned int cv::RNG::operator()(unsigned int N)
作用返回一个从[0, N)均匀采样的随机整数。
cv::RNG::uniform()
int cv::RNG::uniform(int a, int b)
float cv::RNG::uniform(float a, float b)
double cv::RNG::uniform(double a, double b)
作用在[a, b)的范围内产生平均分布使用MWC算法的随机数
cv::RNG::gaussian()
double cv::RNG::gaussian(double sigma)
作用返回从高斯分布中取样的下一个随机数。
cv::RNG::fill()
void cv::RNG::fill(InputOutputArray mat, int distType, InputArray a, InputArray b, bool saturateRangefalse)
作用使用特定分布随机数填充一个至多4个通道的输入矩阵。
参数列表参数含义mat输入矩阵distType指定分布类型。cv::RNG::UNIFORM或cv::RNG::NORMALa均分布是指下限含正态分布指均值b均分布是指上限不含正态分布指标准差saturateRange是否先饱和处理truerange[saturate(a), saturate(b))falsesaturate(range[a, b))