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                   lowerToUpper = false 
)

3.15.3 函数参数

mtx 输入、输出浮点矩阵。
lowerToUpper 操作标志;如果是真的,下半部分是复制到上半。否则,上半部分是复制到下半

3.16 void cv::convertScaleAbs()

3.16.1 函数用途

先缩放元素再取绝对值,最后转换格式为8bit型

3.16.2 函数原型

void cv::convertScaleAbs 
(
InputArray      src, 
OutputArray     dst, 
double           alpha = 1, 
double           beta = 0 
)

3.16.3 函数参数

src 输入数组
dst 输出数组
alpha 可选的缩放因子
beta 可选的加上一个标量值

3.16.4 函数说明

计算方式:
dst(I)=saturate_cast( |src(I)∗alpha+beta| )

3.17 void cv::copyMakeBorder()

3.17.1 函数用途

在图像周围形成一个边界

3.17.2 函数声明

void cv::copyMakeBorder 
(
InputArray                src, 
OutputArray                 dst, 
int      top, 
int       bottom, 
int      left, 
int     right, 
int      borderType, 
const Scalar &      value = Scalar() 
)

3.17.3 函数参数

src 源图像
dst 目标图像,与源图像具有相同类型,大小为Size(src.cols+left+right, src.rows+top+bottom) .
top
bottom
left
right 上下左右各边扩展的距离
bordertype 边界类型
value

3.18 int cv::countNonZero()

3.18.1 函数用途

统计非零值个数

3.18.2 函数原型

int cv::countNonZero 
(
InputArray    src
)

3.18.2 函数说明

返回src矩阵中非零元素的数量

3.19 void cv::dct()

3.19.1 函数用途

正、逆离散余弦变换

3.19.2 函数原型

void cv::dct 
(
InputArray      src, 
OutputArray       dst, 
int           flags = 0 
)

3.19.3 函数参数

src 源数组
dst 目标数组
flags 转换标志

3.19.4 函数说明

计算公式:
一维数组N个元素的正余弦变换
opencv3学习笔记(三)——core组件之模块operations on array_第1张图片

一位数组n个元素的余弦逆变换
opencv3学习笔记(三)——core组件之模块operations on array_第2张图片
如果(flags和dct_inverse)= = 0,函数做了一维或二维正变换。否则,这是一个一维或二维逆变换。
如果(flags和dct_rows)!= 0,函数执行一个一维的每行变换。
如果数组是一列或一行,该函数执行一维变换。
如果以上都不是真的,这个函数执行一个二维变换。

3.20 double cv::determinant()

3.20.1 函数用途

计算并返回行列式

3.20.2 函数原型

double cv::determinant 
(
InputArray   mtx
)

3.20.3 函数说明

返回一个浮点方形行列式

3.21 void cv::dft()

3.21.1 函数用途

一维或二维浮点数组的正、逆离散傅立叶变换

3.21.2 函数原型

void cv::dft 
(
InputArray          src, 
OutputArray         dst, 
int                 flags = 0, 
int                 nonzeroRows = 0 
)

3.21.3 函数参数

src 原数组,可以是实数也可以是复数
dst 输出数组,类型和大小决定于参数flags
flags 转换标志
nonzeroRows

3.21.4 函数说明

n元素的一维数组的傅里叶正变换
opencv3学习笔记(三)——core组件之模块operations on array_第3张图片

n元素的一维数组的傅里叶逆变换
opencv3学习笔记(三)——core组件之模块operations on array_第4张图片

MxN矩阵的傅里叶正变换
这里写图片描述

MxN矩阵的傅里叶逆变换
opencv3学习笔记(三)——core组件之模块operations on array_第5张图片

3.22 void cv::divide()

3.22.1 函数用途

矩阵逐元素除法,支持矩阵掩码

3.22.2 函数原型

void cv::divide 
(
InputArray       src1, 
InputArray       src2, 
OutputArray      dst, 
double           scale = 1, 
int              dtype = -1 
)

3.22.3 函数参数

src1 源数组1
src2 源数组2(与1有相同大小和类型)
dst 输出数组
scale 标量因子
dtype 输出深度可选;=-1,dst为2的深度;当1,2深度相同时,只能令其为-1

3.22.4 函数说明

dst(I) = saturate(src1(I)*scale/src2(I))
注意:
Saturation is not applied when the output array has the depth CV_32S

3.23 void cv::divide()

3.23.1 函数用途

矩阵逐元素除法重载

3.23.2 函数声明

void cv::divide 
(
double           scale, 
InputArray       src2, 
OutputArray      dst, 
int              dtype = -1 
)

3.24 bool cv::eigen()

3.24.1 函数用途

计算对称矩阵的特征值eigenvalues和特征向量eigenvectors

3.24.2 函数原型

bool cv::eigen 
(
InputArray    src, 
OutputArray   eigenvalues, 
OutputArray   eigenvectors = noArray() 
)

3.24.3 函数参数

src 源矩阵( CV_32FC1 or CV_64FC1 type,square size ,是对称矩阵)
eigenvalues 特征值
eigenvectors 特征向量

3.25 void cv::exp()

3.25.1 函数用途

求每个矩阵元素 src(I) 的自然数 e 的 src(I) 次幂

3.25.2 函数原型

void cv::exp 
(
InputArray    src, 
OutputArray     dst 
)

3.25.3 函数说明

这里写图片描述

3.26 void cv::extractChannel()

3.26.1 函数用途

从源数组中提取一个单通道数组

3.26.2 函数原型

void cv::extractChannel 
(
InputArray    src, 
OutputArray   dst, 
int           coi 
)

3.27 void cv::findNonZero()

3.27.1 函数用途

返回非零像素的位置列表

3.27.1 函数原型

void cv::findNonZero 
(
InputArray src, 
OutputArray idx 
)

3.28 void cv::flip()

3.28.1 函数用途

矩阵翻转

3.28.2 函数原型

void cv::flip 
(
InputArray     src, 
OutputArray    dst, 
int            flipCode 
)

3.28.3 函数参数

flipCode 翻转标志

3.28.4 函数说明

opencv3学习笔记(三)——core组件之模块operations on array_第6张图片

flipCode=0,绕x轴翻转
flipCode<0,绕y轴翻转
flipCode>0,绕xy轴翻转

3.29 void cv::gemm()

3.29.1 函数用途

一个广义的矩阵乘法操作

3.29.2 函数原型

void cv::gemm 
(
InputArray src1, 
InputArray src2, 
double alpha, 
InputArray src3, 
double beta, 
OutputArray dst, 
int flags = 0 
)

3.29.3 函数说明

这里写图片描述

3.30 int cv::getOptimalDFTSize()

3.30.1 函数用途

返回一个优化过的DFT大小

3.30.2 函数原型

int cv::getOptimalDFTSize 
(
int    vecsize
)

3.31 void cv::hconcat()

3.31.1 函数用途

横向连接矩阵

3.31.2 函数原型

void cv::hconcat 
(
const Mat *   src, 
size_t    nsrc, 
OutputArray    dst 
)

3.31.3 函数参数

nsrc 源数组里矩阵的个数

3.31.4 函数说明

cv::Mat matArray[] = { cv::Mat(4, 1, CV_8UC1, cv::Scalar(1)),
                       cv::Mat(4, 1, CV_8UC1, cv::Scalar(2)),
                       cv::Mat(4, 1, CV_8UC1, cv::Scalar(3)),};

cv::Mat out;
cv::hconcat( matArray, 3, out );
//out:
//[1, 2, 3;
// 1, 2, 3;
// 1, 2, 3;
// 1, 2, 3]

3.32 void cv::hconcat()

3.32.1 函数用途

横向连接矩阵重载

3.32.2 函数声明

void cv::hconcat 
(
InputArray       src1, 
InputArray       src2, 
OutputArray      dst 
)

3.33 void cv::hconcat()

3.33.1 函数用途

横向连接矩阵重载

3.33.2 函数声明

void cv::hconcat 
(
InputArrayOfArrays   src, 
OutputArray   dst 
)

3.34 void cv::idct()

3.34.1 函数用途

计算一维或二维阵列的离散余弦逆变换#### 3.34.2 函数声明 ####

void cv::idct 
(
InputArray     src, 
OutputArray   dst, 
int          flags = 0 
)

3.35 void cv::idft()

3.35.1 函数用途

计算一维或二维阵列的离散傅里叶逆变换

3.35.2 函数声明

void cv::idft 
(
InputArray   src, 
OutputArray   dst, 
int          flags = 0, 
int        nonzeroRows = 0 
)

3.36 void cv::inRange()

3.36.1 函数用途

检查元素的取值范围是否在另两个矩阵的元素取值之间,返回验证矩阵

3.36.2 函数声明

void cv::inRange 
(
InputArray src, 
InputArray lowerb, 
InputArray upperb, 
OutputArray dst 
)

3.36.3 函数原型

src 输入数组。
lowerb 下边界数组或标量。
upperb 上边界数组或标量。
dst 输出数组的大小相同的Src和cv_8u型。

3.36.3 函数说明

opencv3学习笔记(三)——core组件之模块operations on array_第7张图片

是就置为255,否则为0.

3.37 void cv::insertChannel()

3.37.1 函数用途

插入一个单通道

3.37.2 函数声明

void cv::insertChannel 
(
InputArray          src, 
InputOutputArray    dst, 
int                 coi 
)     

3.38 double cv::invert()

3.38.1 函数用途

矩阵的逆或者伪逆

3.38.2 函数原型

double cv::invert 
(
InputArray      src, 
OutputArray    dst, 
int           flags = DECOMP_LU 
)

3.38.3 函数参数

src input floating-point M x N matrix.
dst output matrix of N x M size and the same type as src.
flags inversion method (cv::DecompTypes)

3.39 void cv::log()

3.39.1 函数用途

求每个矩阵元素的自然对数

3.39.2 函数声明

void cv::log 
(
InputArray   src, 
OutputArray   dst 
)

3.40 void cv::LUT()

3.40.1 函数用途

查表变换look up table

3.40.2 函数原型

void cv::LUT 
(
InputArray     src, 
InputArray     lut, 
OutputArray    dst 
)

3.40.3 函数参数

lut 表,查找表

3.40.4 函数说明

其实查询表的实质就是:把图像中的数据从之前的比较高的灰度级降下来,例如灰度级是256的char类型的灰度级,我们通过一个参数(例如上述程序中就是100),将原来的256个灰度级降到了3个灰度级,原来图像中灰度值在0-100的数据现在灰度值变成了0,原来灰度值为101-200的图像数据现在灰度值变为了1,而201-256的灰度值就变为了2。所以通过参数100,图像的灰度级就到了2,只有0,1,2三个灰度值,那么原来的图像矩阵中的每一位数据我们是char型的,需要8位来表示一个数据,而灰度级降下来之后,我们只需要2位就足以表示所有灰度值
根据源图像(img)中的像素值例如灰度值是78,然后去查询表中去找它对应的是哪个灰度值(对于上面的程序78在查询表中对应的灰度值是0),然后把查询表中78对应的灰度值0赋值给新的图像矩阵(out)中。

3.41 void cv::magnitude()

3.41.1 函数用途

计算二维向量的长度

3.41.2 函数原型

void cv::magnitude 
(
InputArray x, 
InputArray y, 
OutputArray magnitude 
)

3.41.3 函数说明

这里写图片描述

3.42 double cv::Mahalanobis()

3.42.1 函数用途

Mahalanobis距离计算

3.42.2 函数原型

double cv::Mahalanobis 
(
InputArray v1, 
InputArray v2, 
InputArray icovar 
)

3.42.3 函数参数

icovar 逆协方差矩阵
#### 3.42.4 函数说明####
opencv3学习笔记(三)——core组件之模块operations on array_第8张图片

3.43 void cv::max()

3.43.1 函数用途

求每个元素最大值返回这个矩阵

3.43.2 函数原型

void cv::max 
(
InputArray src1, 
InputArray src2, 
OutputArray dst 
)

3.43.3 函数说明

dst(I)=max(src1(I),src2(I))

3.44 void cv::max

3.44.1 函数用途

求每个元素的最大值返回这个矩阵

3.44.2 函数声明

void cv::max 
(
const Mat & 
src1, 


const Mat & 
src2, 


Mat & 
dst 

)

3.45 void cv::max

3.45.1 函数用途

求每个元素的最大值返回这个矩阵重载

3.45.2 函数声明

void cv::max 
(
const UMat &  src1, 
const UMat &  src2, 
UMat &   dst 
)

3.46 Scalar cv::mean

3.46.1 函数用途

求均值(mean)

3.46.2 函数原型

Scalar cv::mean 
(
InputArray  src, 
InputArray  mask = noArray() 
)

3.47 void cv::meanStdDev

3.47.1 函数用途

均值和标准差

3.47.2 函数原型

void cv::meanStdDev 
(
InputArray src, 
OutputArray mean, 
OutputArray stddev, 
InputArray mask = noArray() 
)

3.47.3 函数说明

opencv3学习笔记(三)——core组件之模块operations on array_第9张图片

3.48 void cv::merge

3.48.1 函数用途

多个单通道矩阵合成一个多通道矩阵

3.48.2 函数声明

void cv::merge 
(
const Mat *   mv, 
size_t         count, 
OutputArray    dst 
)

3.49 void cv::merge

3.49.1 函数用途

多个单通道矩阵合成一个多通道矩阵 重载

3.49.2 函数声明

void cv::merge 
(
InputArrayOfArrays mv, 
OutputArray dst 
)

3.50 void cv::min

3.50.1 函数用途

求每个元素的最小值返回这个矩阵

3.50.2 函数原型

void cv::min 
(
InputArray src1, 
InputArray src2, 
OutputArray dst 
)

3.50.3 函数原型

这里写图片描述

3.51 void cv::min

3.51.1 函数用途

求每个元素的最小值返回这个矩阵

3.51.2 函数声明

void cv::min 
(
const Mat & src1, 
const Mat & src2, 
Mat &     dst 
)

3.52 void cv::min

3.52.1 函数用途

求每个元素的最小值返回这个矩阵

3.52.2 函数声明

void cv::min 
(
const UMat & src1, 
const UMat & src2, 
UMat & dst 
)

3.53 void cv::minMaxIdx

3.53.1 函数用途

在一个数组中找到全局最小值和最大值

3.53.2 函数声明

void cv::minMaxIdx 
(
InputArray src, 
double * minVal, 
double * maxVal = 0, 
int * minIdx = 0, 
int * maxIdx = 0, 
InputArray mask = noArray() 
)

3.53.3 函数参数

src 输入单通道数组
minVal 指向最小值,NULL is used if not required.
maxVal 指向最大值,
minIdx 指向最小值的位置
maxIdx 指向最大值的位置
mask 矩阵掩码

3.54 void cv::minMaxLoc

3.54.1 函数用途

在一个数组中找到全局最小值和最大值

3.54.2 函数声明

void cv::minMaxLoc 
(
InputArray src, 
double * minVal, 
double * maxVal = 0, 
Point * minLoc = 0, 
Point * maxLoc = 0, 
InputArray mask = noArray() 
)

3.55 void cv::minMaxLoc

3.55.1 函数用途

在一个数组中找到全局最小值和最大值 重载

3.55.2 函数声明

void cv::minMaxLoc 
(
const SparseMat & a, 
double * minVal, 
double * maxVal, 
int * minIdx = 0, 
int * maxIdx = 0 
)

3.56 void cv::mixChannels

3.56.1 函数用途

从输入数组复制指定的通道到输出阵列。

3.56.2 函数原型

void cv::mixChannels 
(
const Mat * src, 
size_t nsrcs, 
Mat * dst, 
size_t ndsts, 
const int * fromTo, 
size_t npairs 
)

3.56.3 函数参数

src 输入矩阵的向量(可以理解成一队矩阵),所有矩阵必须有相同的大小和深度。

nsrcs 输入矩阵的个数。

dst 输出矩阵的向量。所有的矩阵必须事先分配空间(如用create),大小和深度须与输入矩阵等同

fromTo 序号对向量,用来决定哪个通道被拷贝。偶数下标的用来标识输入矩阵,奇数下标的用来标识输出矩阵。如果偶数下标为负数,那么相应的输出矩阵为零矩阵

npairs fromTo中的序号对数(两个算1对)。

3.56.4 函数说明

举例如下


Mat bgra( 100, 100, CV_8UC4, Scalar(255,0,0,255) );
Mat bgr( bgra.rows, bgra.cols, CV_8UC3 );
Mat alpha( bgra.rows, bgra.cols, CV_8UC1 );

// forming an array of matrices is a quite efficient operation,
// because the matrix data is not copied, only the headers
Mat out[] = { bgr, alpha };
// bgra[0] -> bgr[2], bgra[1] -> bgr[1],
// bgra[2] -> bgr[0], bgra[3] -> alpha[0]
int from_to[] = { 0,2, 1,1, 2,0, 3,3 };
mixChannels( &bgra, 1, out, 2, from_to, 4 );

mixChannels主要就是把输入的矩阵(或矩阵数组)的某些通道拆分复制给对应的输出矩阵(或矩阵数组)的某些通道中,其中的对应关系就由fromTo参数制定.

3.57 void cv::mixChannels

3.57.1 函数用途

从输入数组复制指定的通道到输出阵列。 重载

3.57.2 函数声明

void cv::mixChannels 
(
InputArrayOfArrays    src, 
InputOutputArrayOfArrays   dst, 
const int *   fromTo, 
size_t npairs 
)

3.58 void cv::mixChannels

3.58.1 函数用途

从输入数组复制指定的通道到输出阵列。 重载

3.58.2 函数声明

void cv::mixChannels 
(
InputArrayOfArrays   src, 
InputOutputArrayOfArrays dst, 
const std::vector< int > & fromTo 
)

3.59 void cv::mulSpectrums

3.59.1 函数用途

两个傅立叶频谱间逐元素的乘法

3.59.2 函数原型

void cv::mulSpectrums 
(
InputArray    a, 
InputArray    b, 
OutputArray   c, 
int           flags, 
bool          conjB = false  
)

3.60 void cv::multiply

3.60.1 函数用途

矩阵逐元素乘法

3.60.2 函数原型

void cv::multiply 
(
InputArray src1, 
InputArray src2, 
OutputArray dst, 
double scale = 1, 
int dtype = -1 
)

3.60.3 函数说明

3.61 void cv::mulTransposed

3.61.1 函数用途

计算数组和数组的转置的乘积

3.62.2 函数原型

void cv::mulTransposed 
(
InputArray       src, 
OutputArray      dst, 
bool             aTa, 
InputArray       delta = noArray(), 
double           scale = 1, 
int              dtype = -1 
)

3.62.3 函数参数

src 输入矩阵
dst 目标矩阵
aTa 乘法顺序
delta 一个可选数组, 在乘法之前从 src 中减去该数组。

3.62.3 函数说明

opencv3学习笔记(三)——core组件之模块operations on array_第10张图片

3.62 double cv::norm

3.62.1 函数用途

计算绝对阵范数,绝对差分模,或相对差的范数。

3.62.2 函数原型

double cv::norm 
(
InputArray    src1, 
int           normType = NORM_L2, 
InputArray    mask = noArray() 
)

3.63 double cv::norm

3.63.1 函数用途

计算绝对阵范数,绝对差分模,或相对差的范数。 重载

3.63.2 函数原型

double cv::norm 
(
InputArray         src1, 
InputArray         src2, 
int                normType = NORM_L2, 
InputArray         mask = noArray() 
)

3.64 double cv::norm

3.64.1 函数用途

计算绝对阵范数,绝对差分模,或相对差的范数。 重载

3.64.2 函数原型

double cv::norm 
(
const SparseMat &  src, 
int                normType 
)

3.65 void cv::normalize

3.65.1 函数用途

归一化

3.65.2 函数原型

void cv::normalize 
(
InputArray              src, 
InputOutputArray        dst, 
double                  alpha = 1, 
double                  beta = 0, 
int                     norm_type = NORM_L2, 
int                     dtype = -1, 
InputArray              mask = noArray() 
)

3.65.3 函数参数

src 输入矩阵
dst 归一化后的矩阵
dtype 当小于零时,输出矩阵和输入矩阵有相同的数据类型;否则该值表示输出矩阵的数据类型
mask 矩阵掩码

3.65.4 函数说明

该函数可进行不同类型的归一化操作:
1、norm_type=NORM_MINMAX
dst的最小值为alpha,dst的最大值为beta。
2、norm_type=NORM_INF, NORM_L1, or NORM_L2
dst为src的无穷范数、1范数和2范数。
opencv3学习笔记(三)——core组件之模块operations on array_第11张图片

3.66 void cv::normalize

3.66.1 函数用途

归一化 重载

3.66.2 函数原型

void cv::normalize 
(
const SparseMat & src, 
SparseMat & dst, 
double alpha, 
int normType 
)

3.67 void cv::patchNaNs

3.67.1 函数用途

将一个非数值转化成给定的值

3.67.2 函数原型

void cv::patchNaNs 
(
InputOutputArray a, 
double val = 0 
)

3.68 void cv::PCABackProject

3.68.1 函数用途

wrap PCA::backProject

3.68.2 函数原型

void cv::PCABackProject 
(
InputArray data,
InputArray mean, 
InputArray eigenvectors, 
OutputArray result 
)

3.69 void cv::PCACompute

3.69.1 函数用途

wrap PCA::operator()

3.69.2 函数原型

void cv::PCACompute 
(
InputArray data, 
InputOutputArray mean, 
OutputArray eigenvectors, 
int maxComponents = 0 
)

3.70 void cv::PCACompute

3.70.1 函数用途

wrap PCA::operator()

3.70.2 函数原型

void cv::PCACompute 
(
InputArray data, 
InputOutputArray mean, 
OutputArray eigenvectors, 
double retainedVariance 
)

3.71 void cv::PCAProject

3.71.1 函数用途

wrap PCA::project

3.71.2 函数原型

void cv::PCAProject 
(
InputArray data, 
InputArray mean, 
InputArray eigenvectors, 
OutputArray result 
)

3.72*** void cv::perspectiveTransform *

3.72.1 函数用途

透视变换

3.72.2 函数原型

void cv::perspectiveTransform 
(
InputArray src, 
OutputArray dst, 
InputArray m 
)

3.72.4 函数说明

透视变换(Perspective Transformation)是将图片投影到一个新的视平面(Viewing Plane),也称作投影映射(Projective Mapping)。
http://blog.csdn.net/xiaowei_cqu/article/details/26471527

3.73 void cv::phase

3.73.1 函数用途

计算二维向量的旋转角度。

3.73.1 函数声明

void cv::phase 
(
InputArray x, 
InputArray y, 
OutputArray angle,
bool angleInDegrees = false 
)

3.74 void cv::polarToCart

3.74.1 函数用途

从二维向量的幅值magnitude和角度angle计算它的xy坐标

3.74.2 函数声明

void cv::polarToCart 
(
InputArray magnitude, 
InputArray angle, 
OutputArray x, 
OutputArray y, 
bool angleInDegrees = false 

)

3.74.2 函数说明

这里写图片描述

3.75 void cv::pow

3.75.1 函数用途

Raises every array element to a power

3.75.2 函数原型

void cv::pow 
(
InputArray src, 
double power, 
OutputArray dst 
)

3.75.3 函数说明

这里写图片描述

3.76 double cv::PSNR

3.76.1 函数用途

computes PSNR image/video quality metric

3.76.2 函数原型

double cv::PSNR 
(
InputArray src1, 
InputArray src2 
)

3.77 void cv::randn

3.77.1 函数用途

构造正态分布随机数的数组

3.77.2 函数声明

void cv::randn 
(
InputOutputArray dst, 
InputArray mean, 
InputArray stddev 
)

3.77.3 函数参数

dst 输出数组
mean 产生随机数的平均值
stddev 产生随机数的标准差

3.78 void cv::randShuffle

3.78.1 函数用途

将原数组(矩阵)打乱

3.78.2 函数原型

void cv::randShuffle 
(
InputOutputArray dst, 
double iterFactor = 1., 
RNG * rng = 0 
)

3.78.3 函数参数

dst 输入输出数组(一维)
iterFactor 决定交换数值的行列的位置的一个系数
rng (可选)随机数产生器,0表示使用默认的随机数产生器,即seed=-1。rng决定了打乱的方法

3.78 void cv::randu

3.78.1 函数用途

返回均匀分布的随机数,填入数组或矩阵

3.78.2 函数原型

void cv::randu 
(
InputOutputArray dst, 
InputArray low, 
InputArray high 
)

3.78.3 函数参数

dst 输出数组或矩阵
low 区间下界(闭区间)
high 区间上界(开区间)

3.79 void cv::reduce

3.79.1 函数用途

将矩阵压缩为一个向量

3.79.2 函数原型

void cv::reduce 
(
InputArray     src, 
OutputArray    dst, 
int            dim, 
int            rtype, 
int            dtype = -1 
)

3.80 void cv::repeat

3.80.1 函数用途

矩阵拷贝的时候指定按x/y方向重复

3.80.2 函数声明

void cv::repeat 
(
InputArray src, 
int ny, 
int nx, 
OutputArray dst 
)

3.81 Mat cv::repeat

3.81.1 函数用途

矩阵拷贝的时候指定按x/y方向重复 重载

3.81.2 函数声明

Mat cv::repeat 
(
const Mat & src, 
int ny, 
int nx 
)

3.82 void cv::scaleAdd

3.82.1 函数用途

矩阵计算

3.82.2 函数原型

void cv::scaleAdd 
(
InputArray src1, 
double alpha, 
InputArray src2, 
OutputArray dst 
)

3.82.3 函数说明

dst(I)=alpha⋅src1(I)+src2(I)

3.83 void cv::setIdentity

3.83.1 函数用途

初始化一个刻度单位矩阵

3.83.2 函数原型

void cv::setIdentity 
(
InputOutputArray mtx, 
const Scalar & s = Scalar(1) 
)

3.83.3 函数参数

MTX 矩阵初始化(不一定是正方形)
S 指定对角元素值

3.83.4 函数说明

opencv3学习笔记(三)——core组件之模块operations on array_第12张图片

3.84 bool cv::solve

3.84.1 函数用途

解决了一个或多个线性系统或最小二乘问题

3.84.2 函数声明

bool cv::solve 
(
InputArray src1, 
InputArray src2, 
OutputArray dst, 
int flags = DECOMP_LU 
)

3.85 int cv::solveCubic

3.85.1 函数用途

找到一元三次方程的真正的根

3.85.2 函数原型

int cv::solveCubic 
(
InputArray coeffs, 
OutputArray roots 
)

3.86 double cv::solvePoly

3.86.1 函数用途

找到多项式方程的实根或复根

3.86.2 函数原型

double cv::solvePoly 
(
InputArray    coeffs, 
OutputArray   roots, 
int          maxIters = 300 
)

3.86.3 函数参数

maxiters 迭代算法的最大数量

3.87 void cv::sort

3.87.1 函数用途

给矩阵的列或行排序

3.87.2 函数原型

void cv::sort 
(
InputArray src,
OutputArray dst, 
int flags 
)

3.88 void cv::sortIdx

3.88.1 函数用途

给矩阵的列或行排序

3.88.2 函数原型

void cv::sortIdx 
(
InputArray src, 
OutputArray dst, 
int flags 
)

3.89 void cv::split

3.89.1 函数用途

将一个多通道数组分成几个单通道数组

3.89.2 函数原型

void cv::split 
(
const Mat & src, 
Mat * mvbegin 
)

3.90 void cv::split

3.90.1 函数用途

将一个多通道数组分成几个单通道数组 重载

3.90.2 函数原型

void cv::split 
(
InputArray m, 
OutputArrayOfArrays mv 
)

3.91 void cv::sqrt

3.91.1 函数用途

计算数组元素的平方根

3.91.2 函数原型

void cv::sqrt 
(
InputArray src, 
OutputArray dst 
)

3.92 void cv::subtract

3.92.1 函数用途

矩阵之差

3.92.2 函数声明

void cv::subtract 
(
InputArray src1,
InputArray src2, 
OutputArray dst,
InputArray mask = noArray(), 
int dtype = -1 
)

3.93 Scalar cv::sum

3.93.1 函数用途

数组元素之和

3.93.2 函数原型

Scalar cv::sum 
(
InputArray src
)

3.94 void cv::SVBackSubst

3.94.1 函数用途

wrap SVD::backSubst

3.94.2 函数原型

void cv::SVBackSubst 
(
InputArray w,
InputArray u, 
InputArray vt, 
InputArray rhs, 
OutputArray dst 
)

3.95 void cv::SVDecomp

3.95.1 函数用途

wrap SVD::compute

3.95.2 函数声明

void cv::SVDecomp 
(
InputArray src, 
OutputArray w, 
OutputArray u, 
OutputArray vt, 
int flags = 0 
)

3.96 RNG& cv::theRNG ( )

3.96.1 函数用途

返回默认的随机数发生器

3.97 Scalar cv::trace

3.97.1 函数用途

Returns the trace of a matrix

3.94.2 函数声明

Scalar cv::trace 
(
InputArray mtx
)

3.98 void cv::transform

3.98.1 函数用途

执行每个数组元素的矩阵变换

3.98.2 函数原型

void cv::transform 
(
InputArray src, 
OutputArray dst, 
InputArray m 
)

3.98.2 函数说明

dst(I)=m⋅src(I)

3.99 void cv::transpose

3.99.1 函数用途

转置矩阵

3.99.2 函数原型

void cv::transpose 
(
InputArray src, 
OutputArray dst 
)

3.100 void cv::vconcat

3.100.1 函数用途

垂直连接矩阵

3.100.2 函数声明

void cv::vconcat 
(
const Mat * src, 
size_t nsrc, 
OutputArray dst 
)

3.101 void cv::vconcat

3.101.1 函数用途

垂直连接矩阵 重载

3.101.2 函数原型

void cv::vconcat 
(
InputArray src1,
InputArray src2, 
OutputArray dst 
)

3.102 void cv::vconcat

3.102.1 函数用途

垂直连接矩阵 重载

3.102.2 函数原型

void cv::vconcat 
(
InputArrayOfArrays src, 
OutputArray dst 
)

你可能感兴趣的:(机器视觉)