opencv3学习笔记(三)——core组件之模块operations on array

1.引言

operations on array:数组操作。从官网上及源码上我们可以看到该模块声明了5个类、94个函数、重载了6个函数、定义了9个枚举类型。
详细链接:官网详解

2.类声明

3 函数声明

3.1 void cv::absdiff ()

3.1.1 函数用途

absdiff:absolute difference
该函数用于计算两个矩阵或一个矩阵与一个数的差的绝对值

3.1.2 函数原型
void cv::absdiff ( InputArray src1,  InputArray src2,  OutputArray dst )
3.1.3 函数参数

src1 :
输入第一个数组或数。
src2 :
输入第二个数组或数。
dst :
输出的数组,和输入数组具有相同大小类型。

3.1.4 函数说明

两个相同数组:dst(I)=saturate ( |src1(I)−src2(I)| )
数组与数:dst(I)=saturate ( |src1(I)−src2| )
saturate:饱和。运算结果可能会超出像素灰度值(0~255),所以当运算完后,结果为负就转为0,结果超出255,则为255.但值得注意的是,Saturation is not applied when the arrays have the depth CV_32S. You may even get a negative value in the case of overflow

3.2 void cv::add ()

3.1.1 函数用途

矩阵加法,A+B的更高级形式,支持矩阵掩码

3.2.1 函数原型
void cv::add (
               InputArray src1, 
               InputArray src2,
               OutputArray dst, 
               InputArray mask = noArray(), 
               int dtype = -1 

)
3.2.2 函数参数

src1 输入第一个数组或数。
src2 输入第二个数组或数。
dst 输出的数组,类型由dtype决定
mask 矩阵掩码
dtype 决定输出数组的类型

3.2.3 函数说明

运算公式:dst(I)=saturate(src1(I)+src2(I)) if mask(I)≠0
只有mask矩阵相应位置的元素不为0时,才对src1和src2矩阵相应位置的元素求和,这就是矩阵掩码的作用。
当src1.depth()==src2.depth()时,dtype可以取默认值-1,此时输出矩阵的深度和src1,src2一样。
同样当矩阵深度为CV_32S时,无法应用saturate函数,易出现异常值。

3.3 void cv::addWeighted ()

3.3.1 函数用途

矩阵加权加法

3.3.2 函数原型
void cv::addWeighted 
(
InputArray      src1, 
double          alpha, 
InputArray      src2, 
double          beta, 
double          gamma, 
OutputArray     dst, 
int             dtype = -1 
)
3.3.2 函数参数

src1 输入第一个矩阵
alpha 第一个矩阵元素的权重
src2 输入第二个矩阵(和第一个矩阵具有相同大小和通道数)
beta 第二个矩阵元素的权重
gamma 权重和加上一个标量
dst 输出矩阵(和输入矩阵具有相同大小和通道数)
dtype 设置输出矩阵的深度

3.3.3 函数说明

同样当矩阵深度为CV_32S时,无法应用saturate函数,易出现异常值。

3.4 void cv::batchDistance()

3.4.1 函数用途

朴素最邻近查找

3.4.2 函数声明
void cv::batchDistance 
(
InputArray       src1, 
InputArray       src2, 
OutputArray      dist, 
int             dtype, 
OutputArray      nidx, 
int              normType = NORM_L2, 
int              K = 0, 
InputArray        mask = noArray(), 
int              update = 0, 
bool             crosscheck = false 
)

3.5 void cv::bitwise_and()

3.5.1 函数用途

矩阵位运算-和运算

3.5.2 函数声明
void cv::bitwise_and 
(
InputArray   src1, 
InputArray   src2, 
OutputArray  dst, 
InputArray   mask = noArray() 
)
3.5.2 函数参数

src1 输入第一个数组或数。
src2 输入第二个数组或数。
dst 输出的数组
mask 矩阵掩码

3.6 void cv::bitwise_not()

3.6.1 函数用途

矩阵位运算-取反运算

3.6.2 函数声明
void cv::bitwise_not 
(
InputArray        src, 
OutputArray       dst, 
InputArray        mask = noArray() 
)

3.7 void cv::bitwise_or()

3.7.1 函数用途

矩阵位运算-或运算

3.7.2 函数声明
void cv::bitwise_or 
(
InputArray        src1, 
InputArray        src2, 
OutputArray       dst, 
InputArray        mask = noArray() 
)

3.8 void cv::bitwise_xor()

3.8.1 函数用途

矩阵位运算-异或运算

3.8.2 函数声明
void cv::bitwise_xor 
(
InputArray     src1, 
InputArray     src2, 
OutputArray    dst, 
InputArray     mask = noArray() 
)

3.9 int cv::borderInterpolate()

3.9.1 函数用途

计算扩充边界像素对应于原图中的坐标

3.9.2 函数声明
int cv::borderInterpolate 
(
int     p, 
int     len, 
int     borderType 
)
3.9.3 函数参数

p 扩充边缘的像素的坐标(横坐标或者纵坐标)
len 原图中的坐标
borderType 扩充边缘的类型,就是外插的类型

3.9.4 函数说明

该函数通常不单独使用,通常用于滤波算法和copyMakeBorder函数
详见链接
扩充边缘的的类型,就是外插的类型,opencv给出了几种方式

/*
 Various border types, image boundaries are denoted with '|'
 * BORDER_REPLICATE:     aaaaaa|abcdefgh|hhhhhhh
 * BORDER_REFLECT:       fedcba|abcdefgh|hgfedcb
 * BORDER_REFLECT_101:   gfedcb|abcdefgh|gfedcba
 * BORDER_WRAP:          cdefgh|abcdefgh|abcdefg
 * BORDER_CONSTANT:      iiiiii|abcdefgh|iiiiiii  with some specified 'i'
 */

BORDER_REPLICATE:复制法,也就是复制最边缘像素。
BORDER_REFLECT_101:对称法,也就是以最边缘像素为轴,对称。
BORDER_CONSTANT:常量法

3.10 void cv::calcCovarMatrix()

3.10.1 函数用途

calculate the coveriance matrix
计算协方差阵

3.10.2 函数声明
void cv::calcCovarMatrix 
(
const Mat *     samples, 
int            nsamples, 
Mat &          covar, 
Mat &    mean, 
int     flags, 
int      ctype = CV_64F 
)
3.10.3 函数参数

samples 输入的向量集,它们可以是若干个同样形式的向量组成,也可以是一个矩阵的若干行组成
nsamples 输入的向量的数目
covar 输出的协方差矩阵
mean 输出的均值矩阵
flags 操作标志
ctype 矩阵类型默认为CV_64F
详见链接

3.11 void cv::calcCovarMatrix()

3.11.1 函数用途

计算协方差阵

3.11.2 函数声明
void cv::calcCovarMatrix 
(
InputArray        samples, 
OutputArray        covar, 
InputOutputArray      mean, 
int                 flags, 
int                 ctype = CV_64F 
)

3.12 void cv::cartToPolar()

3.12.1 函数用途

计算二维向量的大小和角度

3.12.2 函数原型
void cv::cartToPolar 
(
InputArray       x, 
InputArray        y, 
OutputArray        magnitude, 
OutputArray        angle, 
bool              angleInDegrees = false 
)
3.12.3 函数参数

X 阵列的X坐标;这必须是一个单精度和双精度浮点数组。
Y 阵列的y坐标,必须有相同的尺寸和相同的X。
magnitude 对同一类型和尺寸的大小输出数组x。
angle 阵列输出的角度,有如X相同的尺寸和类型;角度测量弧度(从0到2 * pi ) 或度(0到360度)。
angleindegrees 一个标志,指示测量度还是弧度(这是默认的)

3.12.4 函数说明

计算方式:
这里写图片描述

3.13 bool cv::checkRange()

3.13.1 函数用途

检查矩阵的每个元素的取值是否在最小值与最大值之间,返回验证结果bool

3.13.2 函数原型
bool cv::checkRange 
(
InputArray    a, 
bool          quiet = true, 
Point *       pos = 0, 
double        minVal = -DBL_MAX, 
double         maxVal = DBL_MAX 
)
3.13.3 函数参数

a 输入一个数组
quiet 标志,当数组元素越界时,指示函数是悄然返回一个错误还是抛出一个异常
pos 可选参数,
minVal 最小值
maxVal 最大值

3.14 void cv::compare()

3.14.1 函数用途

返回逐个元素比较结果的矩阵

3.14.2 函数原型
void cv::compare 
(
InputArray       src1, 
InputArray        src2, 
OutputArray        dst, 
int                cmpop 
)
3.14.3 函数参数

src1 输入地一个数组
src2 输入第二个数组
dst 输出一个和输入数组相同类型大小的CV_8U 数组
cmpop 一个标志,指定阵列之间的对应关系

3.14.4 函数说明

dst(I)=src1(I) cmpop src2(I)
如果比较结果为真,输出数组对应位置为255.

3.15 void cv::completeSymm

3.15.1 函数用途

将矩阵下三角拷贝到上三角或将上三角拷贝到下三角

3.15.2 函数原型
void cv::completeSymm 
(
InputOutputArray      mtx, 
bool                   lo
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值