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