OpenCV中的函数子

随着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 maxComponents=0)

作用:执行默认构造,然后立即将它的参数传递给cv::PCA::operator()

cv::PCA::operator()

cv::PCA& cv::PCA::operator()(InputArray data, InputArray mean, int flags, int maxComponents=0)

作用:生成PCA对象内部分布的模型。

参数:

参数含义
data一个包含所有构成样本分布的矩阵,n采样,D维
mean包含每一维的平均值的矩阵
flags指定data和mean的排布方式:cv::PCA_DATA_AS_ROW:data是n×D,mean是n×1
cv::PCA_DATA_AS_COL:data是D×n,mean是1×n
maxComponents最大保留的成分(维度)数,默认情况下都保留

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的分解形式为:

A=UW V^T

其中,U是m×m的矩阵,W是m×n的对角矩阵(行和列下标不相等时设为0),V是n×n的矩阵。

cv::SVD::SVD()

cv::SVD::SVD()

作用:默认的构造函数,简单的创建SVD对象并初始化空结构

cv::SVD::SVD(InputArray A, int flags=0)

作用:执行默认构造,然后立即将它的参数传递给cv::SVD::operator()

cv::SVD::operator()

cv::SVD& cv::SVD::operator(InputArray A, int flags=0)

作用:将需要分解的矩阵传递给cv::SVD对象,矩阵A将被分为U、W和V的转置(之后记作Vt)。

flags的可取值
含义
cv::SVD::MODIFY_A允许在计算时改变矩阵A的值
cv::SVD::NO_UV不用显式的计算出矩阵U和Vt
cv::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中。若没有找到,则返回值将是使得值最小的向量。

原理:\vec{z}=argmin_{\vec{x}:\left \| \vec{x} \right \|=1}\left \| A\cdot \vec{x} \right \|

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)

作用:执行奇异值反向替换。

原理:形式一:(UWV^T)\cdot \vec{x}=\vec{b}

           形式二:\vec{x}=V_t^T\cdot diag(W)^{-1}\cdot U^T\cdot \vec{b}\sim A^{-1}\cdot \vec{b}

cv::RNG

随机对象RNG用来产生随机数的伪随机序列。一旦随机数发生器创建,就会开始按需提供产生随机数的“服务”,无论是平均分布(Multiply with Carry,MWC算法)还是正态分布(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 saturateRange=false)

作用:使用特定分布随机数填充一个至多4个通道的输入矩阵。

参数列表
参数含义
mat输入矩阵
distType指定分布类型。cv::RNG::UNIFORM或cv::RNG::NORMAL
a均分布是指下限(含),正态分布指均值
b均分布是指上限(不含),正态分布指标准差
saturateRange是否先饱和处理,true:range[saturate(a), saturate(b)),false:saturate(range[a, b))

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/491367.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

查找会议论文的会议地址

有时候会议论文conference proceedings引用格式中要求出现会议地址,如下所示 查找会议地址的方法为直接搜索该会议论文,以ieee为例,会议地址信息在该论文的首页信息中: Conference Location: Arlington, VA, USA中的三项就分别对应…

jqGrid API 全

JQGrid是一个在jquery基础上做的一个表格控件,以ajax的方式和服务器端通信。 JQGrid Demo 是一个在线的演示项目。在这里,可以知道jqgrid可以做什么事情。下面是转自其他人blog的一个学习资料,与其说是学习资料,说成查询帮助文档更…

OpenCV可移植图形工具HighGUI实现图像和视频操作

OpenCV把用于操作系统、文件系统以及摄像机等硬件设备交换的函数纳入了HighGUI(High-level Graphical User Interface)模块中。有了HighGUI模块,我们可以方便地打开窗口、显示图像、读出或写入图像相关的文件、鼠标事件和键盘事件。下面将对三…

华为内部深度解读,关于5G发展的28个核心问题

来源 | 腾讯深网关于5G技术动态与商用进展业界最关心的核心问题,华为5G产品线相关负责人近日对《深网》等进行了详细解读,以下是《深网》整理的问答实录:一、5G先进性与行业应用1. 5G到底是什么?和4G比有什么不一样?从…

福昕阅读器截屏

菜单栏中的照相机按钮即为截屏工具

OpenCV鼠标事件和滑动条事件

鼠标事件 ① 鼠标事件是通过传统的回调函数机制来完成。 void your_mouse_callback(int event, int x, int y, int flags, void* param) 其中,第一个参数要指明事件,第二个和第三个参数是鼠标事件的位置,第四个参数是标志位,第…

《需求分析与系统设计》第三篇

规则和描述性引用完整性约束允许在数据库中定义简单的业务规则,触发器是一个小程序,当定义了触发器的表发生修改操作是自动执行(触发)。数据库就像程序设计语言一样,为建模和程序设计提供了固有数据类型作为基本构造块…

GSMA:中国有望成为全球领先的5G市场之一

来源:GSMA移动智库近日,GSMA(全球移动通信协会)发布首个《中国移动经济发展报告2019》。报告称,中国的移动生态系统在2018年为中国经济创造了5.2万亿元 (7,500亿美元) 的附加值,相当于2018年中国GDP的5.5%。…

查期刊名缩写网站

http://cassi.cas.org/search.jsp

canal —— 阿里巴巴mysql数据库binlog的增量订阅消费组件

阿里巴巴mysql数据库binlog的增量订阅&消费组件canal ,转载自 https://github.com/alibaba/canal 最新更新 canal QQ讨论群已经建立,群号:161559791 ,欢迎加入进行技术讨论。canal消费端项目开源: Otter(分布式数据库同步系统…

OpenCV的滤波与卷积

目录 预备知识 滤波、核和卷积 边界外推和边界处理 阈值化操作 Otsu算法 自适应阈值 平滑 简单模糊和方框型滤波器 中值滤波器 高斯滤波器 双边滤波器 导数和梯度 索贝尔导数 Scharr滤波器 拉普拉斯变换 图像形态学 膨胀和腐蚀 通用形态学函数 开操作和闭操…

中国科协发布20个重大科学问题和工程技术难题

来源:晓艳的科技坊6月30日,中国科协在第二十一届中国科协年会闭幕式上发布了2019年20个对科学发展具有导向作用、对技术和产业创新具有关键作用的前沿科学问题和工程技术难题。   中国科学院院士、中国科协名誉主席韩启德表示,中国科协重大…

latex报错:missing $ inserted

原因是因为_被识别为特殊字符,在_前面加上转移符号\,即\_

OpenCV常见的图像变换

拉伸、收缩、扭曲和旋转 最简单的图像变换是调整图像大小,使其变大或变小。但实际操作时要比想象的复杂一些,因为调整大小带来了像素如何插值(放大)或合并(减少)的问题。 均匀调整 cv::resize() void c…

latex正文显示运算符

以乘号为例,乘号的显示方法为\times,比如a\timesb,就会显示ab,但是如果在正文中这样写会报错,需要改为这样写: a$\times$b

边缘计算对于工业物联网的重要性

来源:物联网世界随着物联网的发展,工业制造设备所产生的数据量将越来越多。如果这些数据都要放到云端处理,就需要无穷无尽的频谱资源、传输带宽和数据处理能力,“云”难免不堪重负,此时就需要边缘计算来分担云计算的压…

老李分享:基于图像识别的跨平台的手机自动化测试方案

老李分享:基于图像识别的跨平台的手机自动化测试方案 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标。如果对课程感兴趣,请大家咨询qq:90…

MATLAB保存图片时字体自动变大

因为设置了导出的最小字体,在图形页面按照下面设置:文件——>导出设置——>字体——>最小为**磅

全新算法助机器学习抵抗干扰

来源:科技日报 机器学习模型受到攻击将产生严重的后果,但如果对这一情形提前预防呢?就像人类针对即将到来的病毒去接种疫苗一样。据澳大利亚联邦科学与工业研究组织(CSIRO)官方网站消息,该机构的一个研究团…

Robot Framework: 自定义自己的python库

利用Robot Framework编写测试用例,往往需要开发自己的关键字,有的关键字需要通过自己编写python代码来实现。这在rf中,就需要自己定义python库。这个过程其实不复杂,本文来介绍下。 1、在python安装目录下的 Lib\site-packages 目…