[opencv]经常使用阵列操做函数总结

/*=========================================================================*/
//                              阵列操做
/*=========================================================================*/
基本矩阵和图像运算符
————————————————————————————————————————————————————————————————————————————
    功能             |                   描述
————————————————————————————————————————————————————————————————————————————
cv::abs() ;          ||   返回数组中全部元素的绝对值  
    |——用法: 
    cv :: MatExpr cv :: abs(cv :: InputArray src);
    cv :: MatExpr cv :: abs(const cv :: MatExpr&src); //矩阵表达式

————————————————————————————————————————————————————————————————————————————
cv::absdiff();       ||    返回两个数组之间差别的绝对值
    |——用法:
    void cv :: absdiff(
            cv :: InputArray src1,//第一个输入数组
            cv :: InputArray src2,//第二个输入数组
            cv :: OutputArray dst //结果数组
    )

————————————————————————————————————————————————————————————————————————————
cv::add()   ;        |    执行两个数组的元素添加
    |——用法:
    void cv :: add(
        cv :: InputArray src1,//第一个输入数组
        cv :: InputArray src2,//第二个输入数组
        cv :: OutputArray dst,//结果数组
        cv :: InputArray mask = cv :: noArray(),//可选,仅在非零值的状况下执行
        int dtype = -1 //结果数组的输出类型
    );

————————————————————————————————————————————————————————————————————————————
cv::addWeighted();   |   执行两个数组的元素加权加法(alpha混合)
    |——用法:
    void cv :: addWeighted(
        cv :: InputArray src1,//第一个输入数组
        double alpha,//第一个输入数组的权重
        cv :: InputArray src2,//第二个输入数组
        double beta,//第二个输入数组的权重
        double gamma,//偏移加到加权和
        cv :: OutputArray dst,//结果数组
        int dtype = -1 //结果数组的输出类型
    );

————————————————————————————————————————————————————————————————————————————
cv::bitwise_and() ;  |    计算两个数组的元素级位和
    |——用法:
    void cv :: bitwise_and(
        cv :: InputArray src1,//第一个输入数组
        cv :: InputArray src2,//第二个输入数组
        cv :: OutputArray dst,//结果数组
        cv :: InputArray mask = cv :: noArray(),//可选,仅在非零值的状况下执行
    );

————————————————————————————————————————————————————————————————————————————
cv::bitwise_not() ;  |    计算两个数组的元素位级NOT
    |——用法:
    void cv :: bitwise_not(
        cv :: InputArray src,//输入数组
        cv :: OutputArray dst,//结果数组
        cv :: InputArray mask = cv :: noArray(),//可选,仅在非零值的状况下执行
    );
    [注]若是你没有使用面膜,也同样 结果能够经过矩阵运算来实现:

————————————————————————————————————————————————————————————————————————————
cv::bitwise_or() ;   |    计算两个数组的元素级OR
    |——用法:
    void cv :: bitwise_and(
    cv :: InputArray src1,//第一个输入数组
    cv :: InputArray src2,//第二个输入数组
    cv :: OutputArray dst,//结果数组
    cv :: InputArray mask = cv :: noArray(),//可选,仅在非零值的状况下执行
);

————————————————————————————————————————————————————————————————————————————
cv::bitwise_xor() ;  |    计算两个数组的元素级比特级XOR
    |——用法:
    void cv :: bitwise_and(
        cv :: InputArray src1,//第一个输入数组
        cv :: InputArray src2,//第二个输入数组
        cv :: OutputArray dst,//结果数组
        cv :: InputArray mask = cv :: noArray(),//可选,仅在非零值的状况下执行
    );

————————————————————————————————————————————————————————————————————————————
cv::calcCovarMatrix() ; |   计算一组n维向量的协方差
    |——用法:
    void cv :: calcCovarMatrix(
        const cv :: Mat * samples,// n-by-1或1-by-n矩阵的C-数组
        int nsamples,//'samples'指向的num个矩阵
        cv :: Mat&covar,// ref为协方差返回数组
        cv :: Mat&mean,// ref为平均值返回数组
        int flags,//特殊变体,

        int ctype = cv :: F64 // covar的输出矩阵类型
    );
    标志参数中的标志    含义
    cv::COVAR_NORMAL    计算均值和协方差
    cv::COVAR_SCRAMBLED    快速PCA“扰乱”协方差
    cv::COVAR_USE_AVERAGE    使用mean做为输入而不是计算它
    cv::COVAR_SCALE    从新缩放输出协方差矩阵
    cv::COVAR_ROWS    使用samples 输入向量的行
    cv::COVAR_COLS    使用samples 输入向量列

————————————————————————————————————————————————————————————————————————————
cv::cartToPolar() ;  |  从二维矢量场计算角度和幅度
    |——用法:
    void cv :: cartToPolar(
        cv :: InputArray x,
        cv :: InputArray y,
        cv :: OutputArray幅度,
        cv :: OutputArray角度,
        bool angleInDegrees = false
    );

————————————————————————————————————————————————————————————————————————————
cv::checkRange() ;   |  检查数组是否有无效值
    |——用法:
    bool cv :: checkRange(
        cv :: InputArray src,
        bool quiet = true,
        cv :: Point * pos = 0//若是是非空的,则是第一个异常值的位置
        double minVal = -DBL_MAX,//下限检查(包括)
        double maxVal = DBL_MAX //上限检查(不包括)
    );

————————————————————————————————————————————————————————————————————————————
cv::compare() ;      |  将所选比较运算符应用于两个数组中的全部元素
    |——用法:
    bool cv :: compare(
        cv :: InputArray src1,//第一个输入数组
        cv :: InputArray src2,//第二个输入数组
        cv :: OutputArray dst,//结果数组
        int cmpop //比较运算符,
    );
    cmp_op的值    对照
    cv::CMP_EQ    (src1i == src2i)
    cv::CMP_GT    (src1i > src2i)
    cv::CMP_GE    (src1i >= src2i)
    cv::CMP_LT    (src1i < src2i)
    cv::CMP_LE    (src1i <= src2i)
    cv::CMP_NE    (src1i != src2i)
    使用矩阵运算能够实现这些相同的结果:

    dst = src1 == src2;
    dst = src1> src2;
    dst = src1> = src2;
    dst = src1 <src2;
    dst = src1 <= src2;
    dst = src1!= src2;
————————————————————————————————————————————————————————————————————————————
cv::completeSymm()      |   
    |——用法:
    bool cv :: completeSymm(
        cv :: InputArray mtx,
        bool lowerToUpper = false
    );

————————————————————————————————————————————————————————————————————————————
cv::comvertScaleAbs();  |  缩放数组,取绝对值,而后转换为8位无符号
    |——用法:
    void cv :: convertScaleAbs(
        cv :: InputArray src,//输入数组
        cv :: OutputArray dst,//结果数组
        double alpha = 1.0//乘法比例因子
        double beta = 0.0 //附加偏移因子
    );
    经过如下循环能够实现相似的结果,具备更大的通用性:
    forint i = 0; i <src.rows; i ++forint j = 0; j <src.cols * src.channels(); j ++)
          dst.at <dst_type>(i,j)= satuarate_cast <dst_type>(
                (double)src.at <src_type>(i,j)* alpha + beta
          );
————————————————————————————————————————————————————————————————————————————
cv::countNonZero() ;    |  计算数组中的非零元素
    |——用法:
    int cv :: countNonZero(//返回mtx中非零元素的数量
        cv :: InputArray mtx,//输入数组
    );

————————————————————————————————————————————————————————————————————————————
cv::cvarrToMat()  ;       |   将2.1版以前的数组类型转换为cv::Mat
    |——用法:
    cv :: Mat cv :: cvarrToMat(
        const CvArr * src,//输入数组:CvMat,IplImage或CvMatND
        bool copyData = false//若是为false则只生成新标题,不然复制数据
        bool allowND = true//若是为true且可能,则将CvMatND转换为Mat
        int coiMode = 0 //若是0:若是COI设置则出错,若是1:忽略COI
    );

————————————————————————————————————————————————————————————————————————————
cv::dct()   ;           |   计算数组的离散余弦变换
    |——用法:
    void cv :: dct(
        cv :: InputArray src,//输入数组
        cv :: OutputArray dst,//结果数组
        int flags,//用于逆变换或逐行
    );
    性能cv::dct() 很大程度上取决于传递给它的数组的确切大小,而这种关系不是单调的。
    只有一些尺寸比其余尺寸更好。建议在将数组传递给时cv::dct() ,首先肯定大于数组的最佳大小,而后将数组扩展到该大小。
    OpenCV提供了一个方便的例程来为您计算这些值,称为cv::getOptimalDFTSize() 。
    实现时, 经过计算长度为n的向量的离散余弦变换cv::dft() 长度为n / 2的向量上 的离散傅里叶变换() 。
    这意味着要得到调用的最佳大小cv::dct() ,您应该像这样计算它:
    size_t opt_dft_size = 2 * cv :: getOptimalDFTSize((N + 1)/ 2);

————————————————————————————————————————————————————————————————————————————
cv::determinant() ;     |   计算方阵的行列式
    |——用法:
    double cv :: determinant(
        cv :: InputArray mat
    );
    cv::determinant() 计算正方形数组的行列式。 
    该数组必须是其中一种浮点数据类型,而且必须是单通道。若是矩阵很小,则行列式由标准公式直接计算。
    对于大矩阵, 这不是有效的,所以行列式是经过高斯消元法计算的 。


————————————————————————————————————————————————————————————————————————————
cv::cvtColor() ;        |   转换颜色空间(通道数)
    |——用法:
    void cv :: cvtColor(
        cv :: InputArray src,//输入数组
        cv :: OutputArray dst,//结果数组
        int code,//颜色映射代码,

        int dstCn = 0 //输出中的通道(0 ='自动')
    );

    【经过cv :: cvtColor()提供的转换】
    —————————————————————————————————————————
    转换代码    含义
    —————————————————————————————————————————
    CV :: COLOR_BGR2RGB
    CV :: COLOR_RGB2BGR
    CV :: COLOR_RGBA2BGRA
    CV :: COLOR_BGRA2RGBA
    —————————————————————————————————————————
    在RGB和BGR颜色空间之间转换(带或不带alpha通道)
    CV :: COLOR_RGB2RGBA
    CV :: COLOR_BGR2BGRA
    —————————————————————————————————————————
    将Alpha通道添加到RGB或BGR图像
    CV :: COLOR_RGBA2RGB
    CV :: COLOR_BGRA2BGR
    —————————————————————————————————————————
    从RGB或BGR图像中删除Alpha通道    
    在添加或删除Alpha通道时将RGB转换为BGR颜色空间
    CV :: COLOR_RGB2GRAY
    CV :: COLOR_BGR2GRAY
    —————————————————————————————————————————
    将RGB或BGR颜色空间转换为灰度
    CV :: COLOR_GRAY2RGB
    CV :: COLOR_GRAY2BGR
    CV :: COLOR_RGBA2GRAY
    CV :: COLOR_BGRA2GRAY
    —————————————————————————————————————————
    将灰度转换为RGB或BGR颜色空间(可选择删除过程当中的Alpha通道)
    CV :: COLOR_GRAY2RGBA
    CV :: COLOR_GRAY2BGRA
    —————————————————————————————————————————
    将灰度转换为RGB或BGR颜色空间并添加Alpha通道
    CV :: COLOR_RGB2BGR565
    CV :: COLOR_BGR2BGR565
    CV :: COLOR_BGR5652RGB
    CV :: COLOR_BGR5652BGR
    CV :: COLOR_RGBA2BGR565
    CV :: COLOR_BGRA2BGR565
    CV :: COLOR_BGR5652RGBA
    CV :: COLOR_BGR5652BGRA
    —————————————————————————————————————————
    经过可选添加或删除Alpha通道(16位图像)从RGB或BGR颜色空间转换为BGR565颜色表示
    CV :: COLOR_GRAY2BGR565
    CV :: COLOR_BGR5652GRAY
    —————————————————————————————————————————
    将灰度转换为BGR565颜色表示,反之亦然(16位图像)
    CV :: COLOR_GRAY2BGR565
    CV :: COLOR_BGR5652GRAY
    —————————————————————————————————————————
    将灰度转换为BGR565颜色表示,反之亦然(16位图像)
    CV :: COLOR_RGB2BGR555
    CV :: COLOR_BGR2BGR555
    CV :: COLOR_BGR5552RGB
    CV :: COLOR_BGR5552BGR
    CV :: COLOR_RGBA2BGR555
    CV :: COLOR_BGRA2BGR555
    CV :: COLOR_BGR5552RGBA
    CV :: COLOR_BGR5552BGRA
    —————————————————————————————————————————
    从RGB或BGR颜色空间转换为BGR555颜色表示,可选择添加或删除Alpha通道(16位图像)
    CV :: COLOR_GRAY2BGR555
    CV :: COLOR_BGR5552GRAY
    —————————————————————————————————————————
    将灰度转换为BGR555颜色表示,反之亦然(16位图像)
    CV :: COLOR_RGB2XYZ
    CV :: COLOR_BGR2XYZ
    CV :: COLOR_XYZ2RGB
    CV :: COLOR_XYZ2BGR
    —————————————————————————————————————————
    将RGB或BGR图像转换为CIE XYZ表示,反之亦然(Rec 709,D65白点)
    CV :: COLOR_RGB2YCrCb
    CV :: COLOR_BGR2YCrCb
    CV :: COLOR_YCrCb2RGB
    CV :: COLOR_YCrCb2BGR
    —————————————————————————————————————————
    将RGB或BGR图像转换为亮度 - 色度(也称为YCC)颜色表示,反之亦然
    CV :: COLOR_BGR2YCrCb
    CV :: COLOR_YCrCb2RGB
    CV :: COLOR_YCrCb2BGR
    —————————————————————————————————————————
    将RGB或BGR图像转换为亮度 - 色度(也称为YCC)颜色表示,反之亦然
    CV :: COLOR_RGB2HSV
    CV :: COLOR_BGR2HSV
    CV :: COLOR_HSV2RGB
    CV :: COLOR_HSV2BGR
    —————————————————————————————————————————
    将RGB或BGR图像转换为HSV(色调饱和度值)颜色表示,反之亦然
    CV :: COLOR_RGB2HLS
    CV :: COLOR_BGR2HLS
    CV :: COLOR_HLS2RGB
    CV :: COLOR_HLS2BGR
    —————————————————————————————————————————
    将RGB或BGR图像转换为HLS(色调亮度饱和度)颜色表示,反之亦然
    CV :: COLOR_RGB2Lab
    CV :: COLOR_BGR2Lab
    CV :: COLOR_Lab2RGB
    CV :: COLOR_Lab2BGR
    —————————————————————————————————————————
    将RGB或BGR图像转换为CIE Lab颜色表示,反之亦然
    CV :: COLOR_RGB2Luv
    CV :: COLOR_BGR2Luv
    CV :: COLOR_Luv2RGB
    CV :: COLOR_Luv2BGR
    —————————————————————————————————————————
    将RGB或BGR图像转换为CIE Luv颜色表示,反之亦然
    CV :: COLOR_BayerBG2RGB
    CV :: COLOR_BayerGB2RGB
    CV :: COLOR_BayerRG2RGB
    CV :: COLOR_BayerGR2RGB
    CV :: COLOR_BayerBG2BGR
    CV :: COLOR_BayerGB2BGR
    CV :: COLOR_BayerRG2BGR
    CV :: COLOR_BayerGR2BGR
    —————————————————————————————————————————
    从拜耳模式(单通道)转换为RGB或BGR图像
    CV :: COLOR_BayerGB2BGR
    CV :: COLOR_BayerRG2BGR
    CV :: COLOR_BayerGR2BGR
————————————————————————————————————————————————————————————————————————————
cv::dft()  ;            |   计算阵列的离散傅里叶变换
    |——用法:
    void cv :: dft(
        cv :: InputArray src,//输入数组
        cv :: OutputArray dst,//结果数组
        int flags = 0//用于逆变换或逐行
        int nonzeroRows = 0 //只有这么多条目非零
    );
    性能cv::dft() 很大程度上取决于传递给它的数组的确切大小,而这种关系不是单调的。
    只有一些尺寸比其余尺寸更好。建议在将数组传递给时cv::dft(),
    首先肯定大于数组的最佳大小,而后将数组扩展到该大小。
    OpenCV提供了一个方便的例程来为您计算这些值,称为cv::getOptimalDFTSize() 。

————————————————————————————————————————————————————————————————————————————
cv::divide() ;          |   执行一个数组的元素划分
    |——用法:
    void cv :: divide(
        cv :: InputArray src1,//第一个输入数组(分子)
        cv :: InputArray src2,//第二个输入数组(分母)
        cv :: OutputArray dst,//结果数组(scale * src1 / src2)
        double scale = 1.0//乘法比例因子
        int dtype = -1 // dst数据类型,-1从src2获取
    );

    void cv :: divide(
        double//全部分区的分子
        cv :: InputArray src2,//输入数组(分母)
        cv :: OutputArray dst,//结果数组(scale / src2)
        int dtype = -1 // dst数据类型,-1从src2获取
    );

————————————————————————————————————————————————————————————————————————————
cv::eigen() ;           |   计算方阵的特征值和特征向量
    |——用法:
    bool cv :: eigen(
        cv :: InputArray src,
        cv :: OutputArray特征值,
        int lowindex = -1int highindex = -1
    );

    bool cv :: eigen(
        cv :: InputArray src,
        cv :: OutputArray特征值,
        cv :: OutputArray特征向量,
        int lowindex = -1int highindex = -1
    );
    给定对称 矩阵mat ,cv::eigen() 将计算 该 矩阵的特征向量 和特征值。

————————————————————————————————————————————————————————————————————————————
cv::exp();              |   计算数组的逐元素取幂
    |——用法:
    void cv :: exp(
        cv :: InputArray src,
        cv :: OutputArray dst
    );
    cv::exp()对src中的全部元素进行指数化,并将结果放入dst。。

————————————————————————————————————————————————————————————————————————————
cv::extractImageCOI();  |   从2.1版以前的阵列类型中提取单个通道
    |——用法:
    bool cv::extractImageCOI(
        const CvArr*    arr,
        cv::OutputArray dst,
        int             coi = -1
    );

————————————————————————————————————————————————————————————————————————————
cv::flip() ;            |   翻转所选轴的阵列
    |——用法:
    void cv :: flip(
        cv :: InputArray src,//输入数组
        cv :: OutputArray dst,//结果数组,'src'的大小和类型
        int flipCode = 0 //> 0:y-flip,0:x-flip,<0:both
    );
    此功能翻转图像 围绕x 轴,y 轴或二者。默认状况下,flipCode 设置为0 ,在x 轴周围翻转。
    若是flipCode 设置大于零(例如,+1 ),则图像将围绕y 轴翻转,
    而且若是设置为负值(例如,–1 ),则图像将围绕两个轴翻转。
    在Win32系统上进行视频处理时,您会发现本身常用此功能在图像格式之间切换,其原点位于图像的左上角和左下角。
————————————————————————————————————————————————————————————————————————————
cv::gemm()  ;           |   执行广义矩阵乘法
    |——用法:
     void cv :: gemm(
        cv::InputArray src1,//第一个输入数组
        cv::InputArray src2,//第二个输入数组
        double alpha,//'src1'*'src2'产品的重量
        cv::InputArray src3,//第三个(偏移)输入数组
        double beta,//'src3'数组的权重
        cv::OutputArray dst,//结果数组
        int flags = 0 //用于转置源数组
    );   
    其中src一、src2和src3是矩阵,α和β是数值系数,op()是所附矩阵的可选换位。
    转置由可选的参数标志控制,这些标志能够是0,也能够是cv::gemm_1_t、cv::gemm_2_t
    和cv::gemm_3_t的任意组合(经过布尔或),每一个标志表示对应矩阵的转置。
    
————————————————————————————————————————————————————————————————————————————
cv::getConvertElem()    |   得到单像素类型转换功能
    |——用法:
    cv :: convertData cv :: getConvertElem(//返回转换函数(以下)
        int fromType,//输入像素类型(例如,cv :: U8)
        int toType //输出像素类型(例如,CV_32F)
    );


————————————————————————————————————————————————————————————————————————————
cv::getConvertScaleElem()   |   得到单像素类型转换和缩放功能
    |——用法:
    cv :: convertScaleData cv :: getConvertScaleElem(//返回转换函数
        int fromType,//输入像素类型(例如,cv :: U8)
        int toType //输出像素类型(例如,CV_32F)
    );
    //转换函数具备如下形式:
    //
    typedef void(* ConvertData)(
    const void * from//指向输入像素位置的指针
    void * to,//指向结果像素位置的指针
    int cn //频道数量
    );

    typedef void(* ConvertScaleData)(
        const void * from//指向输入像素位置的指针
        void * to,//指向结果像素位置的指针
        int cn,//通道数
        double alpha,//比例因子
        double beta //偏移因子
    );
    该 函数cv::getConvertElem()和cv::getConvertScaleElem()返回函数
    指向OpenCV中用于特定类型转换的函数。 返回的函数cv::getConvertElem()
    被定义(via typedef )到类型cv::ConvertData,
    该类型能够传递指向两个数据区域和多个“通道”的指针。
    通道的数量由cn 转换函数的参数给出,这其实是数字fromType 要转换的连续内存对象。
    这意味着您能够经过简单地设置通道数等于数组中元素总数来转换整个(连续内存中)数组。

————————————————————————————————————————————————————————————————————————————
cv::idct() ;            |   计算阵列的逆离散余弦变换
    |——用法:
    void cv :: idct(
        cv :: InputArray src,//输入数组
        cv :: OutputArray dst,//结果数组
        int flags,//用于逐行
    );
    cv::idct() 是 只是一个方便的速记 反离散余弦变换。 
    调用cv::idct() 彻底等同于cv::dct() 使用参数调用:
    cv :: dct(src,dst,flags | cv :: DCT_INVERSE);

————————————————————————————————————————————————————————————————————————————
cv::idft() ;            |   计算阵列的离散傅里叶逆变换
    |——用法:
    cv::idft()只是一个方便的简写 逆离散傅立叶变换。
    回调cv::idft() 是彻底正确的 至关于cv::dft() 使用参数调用:
————————————————————————————————————————————————————————————————————————————
cv::inRange()   ;       |   测试数组的元素是否在两个其余数组以内
    |——用法:
    void cv :: inRange(
        cv :: InputArray src,//输入数组
        cv :: InputArray upperb,//上限数组(含)
        cv :: InputArray lowerb,//下界数组(含)
        cv :: OutputArray dst //结果数组,cv :: U8C1类型
    );



    CV :: insertImageCOI()
————————————————————————————————————————————————————————————————————————————
cv::insertImageCOI() ; |  重新型Mat对象获取数据并将该数据写入遗留阵列的一个特定通道。       
    |——用法:
    void cv::insertImageCOI(
        cv::InputArray img,//输入数组,单通道
        CvArr * arr,// Legacy(pre v2.1)输出数组
        int coi = -1 //目标通道
    );
    旨在帮助咱们使用相似IplImage 和的传统(pre-v2.1)数组CvMat 。
    其目的是容许咱们重新型C ++ cv::Mat 对象获取数据并将该数据写入遗留阵列的一个特定通道。
    输入img 应该是单通道cv::Mat 对象,而输入arr 应该是多通道遗留对象。
    二者的大小必须相同。数据img 将被复制到coi 通道上arr 。
————————————————————————————————————————————————————————————————————————————
cv::invert() ;          |   反转方阵
    |——用法:
    double cv :: invert(//若是'src'是单数,则返回0
        cv :: InputArray src,//输入数组,m-by-n
        cv :: OutputArray dst //结果数组,n-by-m
        int method = cv :: DECOMP_LU //(伪)逆的方法
    );
    cv::invert() 将矩阵反转src 并放置 结果dst 。输入数组必须是浮点类型,结果数组的类型相同。
    由于cv::invert() 包括计算伪逆的可能性,输入数组没必要是方形的。
    若是输入数组是n × m ,则结果数组将是m × n 。
    此函数支持几种计算逆矩阵的方法,但默认为高斯消元法。返回值取决于使用的方法。
    【cv :: invert()的方法参数的可能值】
    方法参数的值    含义
    cv::DECOMP_LU    高斯消元(LU分解)
    cv::DECOMP_SVD    奇异值分解(SVD)
    cv::DECOMP_CHOLESKY    仅适用于对称正矩阵
————————————————————————————————————————————————————————————————————————————
cv::log() ;             |   计算元素的元素天然对数
    |——用法:
    void cv :: log(
        cv :: InputArray src,
        cv :: OutputArray dst
    );
    cv::log() 计算天然 记录元素src1并将结果放入dst。
    小于或等于零的源像素标记为设置为较大负值的目标像素。
————————————————————————————————————————————————————————————————————————————
cv::magnitude();        |   从二维矢量场计算大小
    |——用法:
    void cv::magnitude(
        cv::InputArray x,
        cv::InputArray y,
        cv::OutputArray dst
    );
    cv::marize()基本上计算二维向量场上笛卡尔到极坐标转换的径向部分。
    在cv::Magnitude()的状况下,这个向量场应该是两个单独的单通道阵列的形式。
    这两个输入数组的大小应该相同。(若是您有一个双通道数组,cv::split()将为您提供单独的通道)
    dst中的每一个元素都是根据x和y的对应元素做为这两个元素的欧几里得范数(即对应值平方和的平方根)来计算的。
————————————————————————————————————————————————————————————————————————————
cv::LUT() ;             |   将数组转换为查找表的索引
    |——用法:
    void cv::LUT(
        cv::InputArray src,
        cv::InputArray lut,
        cv::OutputArray dst
    );
    该功能cv::LUT() 执行 一个“查找表转换” 该 输入src 。
    cv::LUT() 要求源数组src 为8位索引值。该lut 数组包含查找表。
    该查找表数组应该具备刚好256个元素,而且能够具备单个通道,
    或者在多通道src 阵列的状况下,具备与源阵列相同数量的通道。cv::LUT()。
    而后,该函数 使用相应的值 做为该表的索引,使用dst 从查找表中获取的值填充目标数组。

————————————————————————————————————————————————————————————————————————————
cv::Mahalanobis() ;     |   计算两个向量之间的Mahalanobis距离
    |——用法:
    cv :: Size cv :: mahalanobis(
        cv :: InputArray vec1,
        cv :: InputArray vec2,
        cv :: OutputArray icovar
    );


————————————————————————————————————————————————————————————————————————————
cv::max();              |   计算两个数组之间的元素最大值
    |——用法:
    cv :: MatExpr cv :: max(
        const cv :: Mat&src1,//第一个输入数组(第一个位置)
        const cv :: Mat&src2 //第二个输入数组
    );

    MatExpr cv :: max(//矩阵表达式,不是矩阵
        const cv :: Mat&src1,//第一个输入数组(第一个位置)
        double value //第二个位置的标量
    );

    MatExpr cv :: max(//矩阵表达式,不是矩阵
        double value,//第一个位置的标量
        const cv :: Mat&src1 //输入数组(第二个位置)
    );

    void cv :: max(
        cv :: InputArray src1,//第一个输入数组
        cv :: InputArray src2,//第二个输入数组
        cv :: OutputArray dst //结果数组
    );
    void cv :: max(
        const Mat&src1,//第一个输入数组
        const Mat&src2,//第二个输入数组
        Mat&dst //结果数组
    );

    void cv :: max(
        const Mat&src1,//输入数组
        double value,//标量输入
        Mat&dst //结果数组
    );
    cv::max() 计算每一个相应的一对阵列中的像素的最大值src1 和src2 。
    它有两种基本形式:返回矩阵表达式的那些以及计算结果并将其放在您指示的位置的那些。
    在三参数形式中,在其中一个操做数是a的状况下cv::Scalar,
    与多通道阵列的比较是在每一个通道的基础上用相应的组件完成的cv::Scalar。

————————————————————————————————————————————————————————————————————————————
cv::mean() ;            |   计算数组元素的平均值
    |——用法:
    cv :: Scalar cv :: mean(
        cv :: InputArray src,
        cv :: InputArray mask = cv :: noArray(),//可选,仅在非零值的状况下执行
    );
    该函数cv::mean()计算全部的平均值输入数组src 中未被屏蔽的像素数。
    若是src 是多通道,则基于每一个通道计算结果。

————————————————————————————————————————————————————————————————————————————
cv::meadStdDev() ;      |   计算数组元素的平均值和标准差
    |——用法:
    void cv :: meanStdDev(
        cv :: InputArray src,
        cv :: OutputArray的意思是,
        cv :: OutputArray stddev,
        cv :: InputArray mask = cv :: noArray(),//可选,仅在非零值的状况下执行
    );
    该函数cv::meanStdDev() 计算平均值 输入数组src中未被屏蔽的像素值,以及它们的标准误差。
    若是src 是多通道,则基于每一个通道计算平均值和标准误差。
————————————————————————————————————————————————————————————————————————————
cv::merge() ;           |   将多个通道阵列合并为一个多通道阵列
    |——用法:
    void cv :: merge(
        const cv :: Mat * mv,// C风格的数组数组
        size_t count,//'mv'指向的数组数
        cv :: OutputArray dst //包含'mv'中的全部通道
    );
    void merge(
        const vector <cv :: Mat>&mv,// STL样式的数组数组
        cv :: OutputArray dst //包含'mv'中的全部通道
    );

————————————————————————————————————————————————————————————————————————————
cv::min()   ;           |   计算两个数组之间元素最小值
    |——用法:
    cv :: MatExpr cv :: min(//矩阵表达式,不是矩阵
        const cv :: Mat&src1,//第一个输入数组
        const cv :: Mat&src2 //第二个输入数组
    );

    MatExpr cv :: min(//矩阵表达式,不是矩阵
        const cv :: Mat&src1,//第一个输入数组(第一个位置)
        double value //第二个位置的标量
    );

    MatExpr cv :: min(//矩阵表达式,不是矩阵
        double value,//第一个位置的标量
        const cv :: Mat&src1 //输入数组(第二个位置)
    );
    void cv::min(
        cv :: InputArray src1,//第一个输入数组
        cv :: InputArray src2,//第二个输入数组
        cv :: OutputArray dst //结果数组
    );
    void cv :: min(
        const Mat&src1,//第一个输入数组
        const Mat&src2,//第二个输入数组
        Mat&dst //结果数组
    );

    void cv :: min(
        const Mat&src1,//输入数组
        double value,//标量输入
        Mat&dst //结果数组
    );   

————————————————————————————————————————————————————————————————————————————
cv::minMaxIdx() ;       |   
    |——用法:
    void cv :: minMaxIdx(
        cv :: InputArray src,//输入数组,仅限单通道
        double * minVal,// min值到这里(非NULL)
        double * maxVal,// min值到这里(非NULL)
        int * minIdx,// loc的min在这里(若是不是NULL)
        int * maxIdx,//最大值的loc在这里(若是不是NULL)
        cv :: InputArray mask = cv :: noArray()//仅搜索非零值
    );

    void cv :: minMaxIdx(
        const cv :: SparseMat&src,//输入稀疏数组
        double * minVal,// min值到这里(非NULL)
        double * maxVal,// min值到这里(非NULL)
        int * minIdx,// C样式数组,min locs的索引
        int * maxIdx,// C样式数组,max locs的索引
    );
    cv::minMaxIdx() 也能够用一个被称为cv::SparseMat 对所述src 阵列。
    在这种状况下,阵列能够具备任意数量的维度,而且将计算最小值和最大值并返回它们的位置。
    在这种状况下,极值的位置将被返回,并放置在C语言风格的阵列minLoc 和maxLoc 。
    这两个数组(若是提供)应该具备与src 数组中维数相同的元素数。
    在这种状况下cv::SparseMat ,最小值和最大值仅针对源代码中一般称为非零元素的内容计算; 
    然而,这个术语有点误导,由于真正意味着存在的元素在内存中的稀疏矩阵表示中。
    事实上,因为稀疏矩阵是如何造成的,以及过去对它作了什么,可能存在而且也是零的元素。
    这些元素将包括在最小值和最大值的计算中。

    【waring】
    提供单维数组时,位置的数组仍必须为两个整数分配内存。
    这是由于cv::minMaxLoc() 使用这样的惯例,即便是一维数组本质上也是N ×1矩阵。
    在这种状况下,返回的第二个值对于每一个位置始终为0。

————————————————————————————————————————————————————————————————————————————
cv::minMaxLoc() ;       |   查找数组中的最大值和最小值
    |——用法:
    void cv :: minMaxLoc(
        cv :: InputArray src,//输入数组
        double * minVal,// min值到这里(非NULL)
        double * maxVal,// min值到这里(非NULL)
        cv :: Point * minLoc,// loc的min在这里(若是不是NULL)
        cv :: Point * maxLoc,//最大值的loc在这里(若是不是NULL)
        cv :: InputArray mask = cv :: noArray()//仅搜索非零值
    );

    void cv :: minMaxLoc(
        const cv :: SparseMat&src,//输入稀疏数组
        double * minVal,// min值到这里(非NULL)
        double * maxVal,// min值到这里(非NULL)
        cv :: Point * minLoc,// C风格的数组,最小值的索引
        cv :: Point * maxLoc,// C风格的数组,最大值的索引
    );
    这个例程找到了 数组中的最小值和最大值,src 并(可选)返回其位置。
    计算出的最小值和最大值分别放在minVal 和中maxVal 。可选地,也能够返回那些极值的位置。
    这些位置将写入由minLoc和给出的地址maxLoc(假设这些参数不是NULL )。
    由于这些位置是类型的cv::Point,因此这种形式的函数应该仅用于二维数组(即矩阵或图像)。

————————————————————————————————————————————————————————————————————————————
cv::mixChannels() ;     |   从输入数组到输出数组的通道
    |——用法:
    void cv :: mixChannels(
        const cv :: Mat * srcv,// C风格的矩阵数组
        int nsrc,//'srcv'中的元素数
        cv :: Mat * dstv,// C风格的目标矩阵数组
        int ndst,//'dstv'中的元素数
        const int * fromTo,// C风格的数组对,......从...到...
        size_t n_pairs //'fromTo'中的对数
    );

    void cv :: mixChannels(
        const vector <cv :: Mat>&srcv,// STL样式的矩阵向量
        vector <cv :: Mat>&dstv,//目标矩阵的STL样式向量
        const int * fromTo,// C风格的数组对,......从...到...
        size_t n_pairs //'fromTo'中的对数
    );
    OpenCV中有许多操做是从输入中的一个或多个图像从新排列通道的通常问题的特殊状况,
    并将它们分类到输出中的一个或多个图像中的特定通道中。
    像cv::split() ,cv::merge() 和(至少某些状况)cv::cvtColor()这样的函数都使用这样的功能。
    这些方法经过调用更为通用的方式来完成他们须要作的事情cv::mixChannels() 。

————————————————————————————————————————————————————————————————————————————
cv::mulSpectrums()  ;   |   计算两个傅里叶光谱的元素乘法    
    |——用法:
    doublevoid cv :: mulSpectrums(
        cv :: InputArray arr1,//第一个输入数组
        cv :: InputArray arr2,//第二个输入数组,大小与'arr1'相同
        cv :: OutputArray dst,//结果数组,大小与'arr1'相同
        int flags,//用于表示独立的行
        bool conj = false //若是为true,则先绑定arr2
    );
    在许多业务中 涉及 光谱(即,cv::dft() 或的结果cv::idft()),
    人们但愿进行每元素乘法,其考虑光谱的包装(实数阵列),或者它们做为复变量的性质。
    输入数组能够是一维或二维,第二个与第一个相同,大小和类型相同。
    若是输入阵列是二维的,则它能够被认为是真正的二维光谱,或者是一维光谱的阵列(每行一个)。
    在后一种状况下,flags 应设置为cv::DFT_ROWS ; 不然能够设置为0 。

    当两个数组很复杂时,它们只是在逐个元素的基础上相乘,
    但cv::mulSpectrums()提供了在乘法以前共轭第二个数组元素的选项。
    例如,您可使用此选项执行相关(使用傅里叶变换),但对于卷积,您可使用conj=false 。
————————————————————————————————————————————————————————————————————————————
cv::multiply() ;        |   执行两个数组的逐元素乘法
    |——用法:
    void cv :: multiply(
        cv :: InputArray src1,//第一个输入数组
        cv :: InputArray src2,//第二个输入数组
         cv :: OutputArray dst,//结果数组
        double scale = 1.0//总体比例因子
        int dtype = -1 //结果数组的输出类型
    );
    cv::multiply() 是一个简单的乘法函数; 
    它将元素乘以src1 相应的元素src2 并将结果放入dst 。 
————————————————————————————————————————————————————————————————————————————
cv::mulTransposed() ;   |   计算一个数组的矩阵乘积
    |——用法:
    void cv :: mulTransposed(
        cv :: InputArray src1,//输入矩阵
        cv :: OutputArray dst,//结果数组
        bool aTa,//若是为真,则转置而后相乘
        cv :: InputArray delta = cv :: noArray(),//在乘法以前减去'src1'
        double scale = 1.0//总体比例因子
        int dtype = -1 //结果数组的输出类型
    );
    cv::mulTransposed() 用于计算产品 矩阵及其自身的转置-例如,在计算协方差时颇有用。
    矩阵src 应该是二维和单通道的,但不像cv::GEMM(),它不限于浮点类型。
    除非另有说明,不然结果矩阵将与源矩阵的类型相同dtype 。
    若是dtype 不是否认的(默认),则应为CV_32F 或cv::F64 ; dst 而后输出数组将是指定的类型。

————————————————————————————————————————————————————————————————————————————
cv::norm() ;            |   计算两个数组之间的归一化相关性
    |——用法:
    double cv :: norm(//以double精度返回norm
        cv :: InputArray src1,//输入矩阵
        int normType = cv :: NORM_L2,//要计算的范数类型
        cv :: InputArray mask = cv :: noArray()//为非零值(若是存在)执行
    );

    double cv :: norm(//返回计算的差别范数
        cv :: InputArray src1,//输入矩阵
        cv :: InputArray src2,//第二个输入矩阵
        int normType = cv :: NORM_L2,//要计算的范数类型
        cv :: InputArray mask = cv :: noArray()//为非零值(若是存在)执行
    );

    double cv :: norm(
        const cv :: SparseMat&src,//输入稀疏矩阵
        int normType = cv :: NORM_L2,//要计算的范数类型
    );
    该cv::norm()函数用于计算范数 若是提供了两个数组,则数组或两个数组之间的各类距离范数。
    cv::SparseMat 也能够计算a的范数,在这种状况下,在规范的计算中忽略零条目。

————————————————————————————————————————————————————————————————————————————
cv::normalize() ;       |   将数组中的元素规范化为某个值
    |——用法:
    void cv :: normalize(
        cv :: InputArray src1,//输入矩阵
        cv :: OutputArray dst,//结果矩阵
        double alpha = 1//第一个参数
        double beta = 0//第二个参数

        int normType = cv :: NORM_L2,//要计算的范数类型
        int dtype = -1 //结果数组的输出类型
        cv :: InputArray mask = cv :: noArray()//为非零值(若是存在)执行
    );

    void cv :: normalize(
        const cv :: SparseMat&src,//输入稀疏矩阵
        cv :: SparseMat&dst,//结果稀疏矩阵
        double alpha = 1//第一个参数

    int normType = cv :: NORM_L2,//要计算的范数类型
    );
    
    与许多OpenCV功能同样,cv::normalize() 它比最初出现时更多。
    根据值normType ,图像src 被标准化或以其余方式映射到特定范围内dst 。 
    除非使用 参数,不然该数组dst 的大小src与数据类型相同,而且具备相同的数据类型dtype。
    可选地,dtype 能够设置为OpenCV基本类型之一(例如,CV_32F ),
    而且输出数组将是该类型。此操做的确切含义取决于normType 参数。

————————————————————————————————————————————————————————————————————————————
cv::normalize() ;       |   将数组中的元素规范化为某个值    
    |——用法:
     void cv :: normalize(
        cv :: InputArray src1,//输入矩阵
        cv :: OutputArray dst,//结果矩阵
        double alpha = 1//第一个参数(见下表)
      
        double beta = 0//第二个参数
   
        int normType = cv :: NORM_L2,//要计算的范数类型
        int dtype = -1 //结果数组的输出类型
        cv :: InputArray mask = cv :: noArray()//为非零值(若是存在)执行
    );

    void cv :: normalize(
        const cv :: SparseMat&src,//输入稀疏矩阵
        cv :: SparseMat&dst,//结果稀疏矩阵
        double alpha = 1//第一个参数(见表)
        int normType = cv :: NORM_L2,//要计算的范数类型
    );


————————————————————————————————————————————————————————————————————————————
cv::perspectiveTransform()  |   执行向量列表的透视矩阵变换
    |——用法:
    void cv :: perspectiveTransform(
        cv :: InputArray src,//输入数组,2或3个通道
        cv :: OutputArray dst,//结果数组,大小,类型,如src1
        cv :: InputArray mtx // 3-by-3或4-by-4 transoform矩阵
    );
    该cv::perspectiveTransform() 功能执行 点列表(不是像素)的平面投影变换。
    输入阵列应为两通道或三通道阵列mtx ,在这两种状况下矩阵应分别为3×3或4×4。
    cv::perspectiveTransform()
    所以src,首先将每一个元素转换为关于它的长度向量src.channels() + 1 ,
    其中附加维度(投影维度)最初设置为1.0 。这个是也称为齐次坐标 。
    而后将每一个扩展矢量乘以mtx而且经过(新)投影坐标7的值从新调整结果
    (而后将其丢弃,由于它老是在该操做以后)。

    请再次注意,此例程用于转换点列表,而不是图像转换。 
    若是要对图像应用透视变换,其实是要求不变换单个像素,
    而是将它们从图像中的一个位置移动到另外一个位置。

    若是你想解决逆问题,找到最可能的透视变换给定多对对应点,
    使用cv::getPerspectiveTransform()或cv::findHomography() 。

————————————————————————————————————————————————————————————————————————————
cv::phase() ;           |   从二维矢量场计算方向
    |——用法:
    void cv :: phase(
        cv :: InputArray x,//输入x-components数组
        cv :: InputArray y,//输入y份量数组
        cv :: OutputArray dst,//输出角度数组(弧度)
        bool angleInDegrees = false //度(若是为真),弧度(若是为假)
    );

————————————————————————————————————————————————————————————————————————————
cv::polarToCart() ;     |   从角度和大小计算二维矢量场
    |——用法:
    void cv :: polarToCart(
        cv :: InputArray magnitude,//输入幅度数组
        cv :: InputArray angle,//输入角度数组
        cv :: OutputArray x,// x组件的输出数组
        cv :: OutputArray y,// y组件的输出数组
        bool angleInDegrees = false //度(若是为true)弧度(若是为false)
    );


————————————————————————————————————————————————————————————————————————————
cv::pow()   ;           |   将数组的每一个元素提高到给定的幂
    |——用法:
    void cv :: pow(
        cv :: InputArray src,//输入数组
        double p,//求幂的幂
        cv :: OutputArray dst //结果数组
    );
    该函数cv::pow() 计算 由给定功率对阵列的元素取幂p。
    在p 整数的状况下,直接计算功率。对于非p 整数,首先计算源值的绝对值,
    而后将其提升到幂p (所以仅返回实数值)。
    对于某些特殊值p,例如整数值或±½,使用特殊算法,从而加快计算速度 。

————————————————————————————————————————————————————————————————————————————
cv::randu() ;           |   使用均匀分布的随机数填充到给定数组
    |——用法:
    template <typename _Tp> _Tp randu(); //返回特定类型的随机数

    void cv :: randu(
        cv :: InputOutArray mtx,//全部值都是随机的
        cv :: InputArray low,// minimum,1-by-1(Nc = 1,4)或1-by-4(Nc = 1)
        cv :: InputArray high // maximum,1-by-1(Nc = 1,4)或1-by-4(Nc = 1)
    );

————————————————————————————————————————————————————————————————————————————
cv::randn() ;           |   使用正态分布的随机数填充到给定数组
    |——用法:
    void cv :: randn(
        cv :: InputOutArray mtx,//全部值都是随机的
        cv :: InputArray mean,// mean mean,array在channel space中
        cv :: InputArray stddev //标准误差,通道空间
    );

————————————————————————————————————————————————————————————————————————————
cv::randShuffle() ;     |   随机洗牌数组元素
    |——用法:
    void cv :: randShuffle(
        cv :: InputOutArray mtx,//全部值都将被洗牌
        double iterFactor = 1//重复随机播放的次数
        cv :: RNG * rng = NULL //你本身的发电机,若是你愿意的话
    );
    cv::randShuffle() 试图随机化 经过选择随机元素对并交换它们的位置,在一维数组中输入条目。
    此类交换的数量等于数组的mtx 大小乘以可选因子iterFactor 。
    任选地,一个随机数生成器能够被提供。
    若是未提供,theRNG() 则将自动使用默认随机数生成器。

————————————————————————————————————————————————————————————————————————————
cv::reduce() ;          |   经过给定操做将二维数组减小为向量
    |——用法:
    void cv :: reduce(
        cv :: InputArray src,//输入,n-by-m,2维
        cv :: OutputArray vec,//输出,1-by-m或n-by-1
        int dim,//减小方向0 =行,1 = col
        int reduceOp = cv :: REDUCE_SUM,//减小操做
        int dtype = -1 //结果数组的输出类型
    );
    reduceOp参数选择简化运算符
    op的价值    结果
    cv::REDUCE_SUM    跨矢量计算和
    cv::REDUCE_AVG    计算向量的平均值
    cv::REDUCE_MAX    跨矢量计算最大值
    cv::REDUCE_MIN    计算矢量的最小值

    cv :: reduce()中的dim参数控制缩减的方向
    昏暗的价值    结果
    0    折叠成一行
    1    折叠到单个列

    cv::reduce() 支持任何类型的多通道数组。使用dtype ,您能够为其指定替代类型dst 。

————————————————————————————————————————————————————————————————————————————
cv::repeat() ;          |   将一个数组的内容平铺到另外一个数组中
    |——用法:
    void cv :: repeat(
        cv :: InputArray src,//输入二维数组
        int nx,//沿x方向复制
        int ny,//在y方向复制
        cv :: OutputArray dst //结果数组
    );

    cv :: Mat cv :: repeat(//返回结果数组
        cv :: InputArray src,//输入二维数组
        int nx,//沿x方向复制
        int ny //在y方向复制
    );

————————————————————————————————————————————————————————————————————————————
cv::saturate-cast<>();  |   转换为基元类型(模板函数)
    |——用法:



————————————————————————————————————————————————————————————————————————————
cv::ScaleAdd()  ;       |   计算两个数组的元素总和,并可选择缩放第一个数组
    |——用法:
    void cv :: scaleAdd(
        cv :: InputArray src1,//第一个输入数组
        double scale,//应用于第一个数组的比例因子
        cv :: InputArray src2,//第二个输入数组
        cv :: OutputArray dst,//结果数组
    );
    cv::scaleAdd() 习惯了 计算两个数组的总和,
    src1并在总和完成以前将src2比例因子scale应用于第一个数组。结果放在数组中dst。
    [注意]使用矩阵代数运算能够得到相同的结果:    dst = scale * src1 + src2;

————————————————————————————————————————————————————————————————————————————
cv::setIdentity() ;     |   将数组的全部元素的对角线设置为1,不然设置为0。
    |——用法:
    void cv :: setIdentity(
        cv :: InputOutputArray dst,//用于重置值的数组
        const cv :: Scalar&value = cv :: Scalar(1.0//应用于对角线元素
    );
    cv::setIdentity() 设置全部元素0 除了行和列相等的元素以外的数组;
    这些元素设置为1(或value 提供)。cv::setIdentity()支持全部数据类型,而且不要求数组为正方形。
————————————————————————————————————————————————————————————————————————————
cv::solve() ;           |   求解线性方程组  
    |——用法:
    int cv :: solve(
        cv :: InputArray lhs,//系统的左侧,n-by-n
        cv :: InputArray rhs,//系统的右侧,n-by-1
        cv :: OutputArray dst,// Results数组,将是n-by-1
        int method = cv :: DECOMP_LU //求解器的方法
    );
    该功能cv::solve()提供了快速解决线性系统的方法cv::invert() 。

————————————————————————————————————————————————————————————————————————————
cv::solveCubic() ;      |   找到(惟一的)三次方程的实根
    |——用法:
    int cv :: solveCubic(
        cv :: InputArray coeffs,
        cv :: OutputArray根
    );


————————————————————————————————————————————————————————————————————————————
cv::solvePoly() ;       |   找到多项式方程的复根
    |——用法:
    int cv :: solvePoly(
        cv :: InputArray coeffs,
        cv :: OutputArray roots //复杂根(2通道)
        int maxIters = 300 //解算器的最大迭代次数
    );

————————————————————————————————————————————————————————————————————————————
cv::sort() ;            |   对数组中的行或列中的元素进行排序
    |——用法:
    void cv :: sort(
        cv :: InputArray src,
        cv :: OutputArray dst,
        int flags
    );
    OpenCV排序函数用于二维数组。仅支持单通道源阵列。
    您不该该将此视为在电子表格中对行或列进行排序;cv::sort() 排序每行或列分开 。
    排序操做的结果将是一个新数组dst ,其大小和类型与源数组相同。

————————————————————————————————————————————————————————————————————————————
cv::sortIdx() ;         |   具备相同的目的cv::sort(),除了数组未修改并返回索引
    |——用法:
    void cv :: sortIdx(
        cv :: InputArray src,
        cv :: OutputArray dst,
        int flag
    );
    相似于cv::sort() ,cv::sortIdx() 使用 仅适用于单通道二维阵列。
    cv::sortIdx() 排序每行或列分开。
    排序操做的结果是一个新数组,dst其大小与源数组相同,但包含已排序元素的整数索引。

    ————————————————————————————————————————————————————————————————————————————
cv::split() ;           |   将多通道阵列拆分为多个单通道阵列
    |——用法:
    void cv :: split(
        const cv :: Mat&mtx,
        cv :: Mat * mv
    );

    void cv :: split(
        const cv :: Mat&mtx,
        vector <Mat>&mv // n个1通道cv :: Mat的STL样式矢量
    );

————————————————————————————————————————————————————————————————————————————
cv::sqrt()  ;           |   计算数组的元素方形根
    |——用法:
    void cv :: sqrt(
        cv :: InputArray src,
        cv :: OutputArray dst
    );
    做为一个特例cv::pow(),cv::sqrt() 将会 计算数组的逐元素平方根。多个通道单独处理。

————————————————————————————————————————————————————————————————————��———————
cv::subtract() ;        |   从另外一个阵列执行逐个元素的减法
    |——用法:
    void cv :: subtract(
        cv :: InputArray src1,//第一个输入数组
        cv :: InputArray src2,//第二个输入数组
        cv :: OutputArray dst,//结果数组
        cv :: InputArray mask = cv :: noArray(),//可选,仅在非零值的状况下执行
        int dtype = -1 //结果数组的输出类型
    );


————————————————————————————————————————————————————————————————————————————
cv::sum()   ;           |   求和数组的全部数组
    |——用法:
    cv :: Scalar cv :: sum(
        cv :: InputArray arr
    );

————————————————————————————————————————————————————————————————————————————
cv::theRNG() ;          |   返回一个随机数生成器
————————————————————————————————————————————————————————————————————————————
cv::trace() ;           |   计算数组的跟踪
    |——用法:
    cv :: Scalar cv :: trace(
        cv :: InputArray mat
    );
    该矩阵的轨迹是全部对角元素的总和。 OpenCV中的跟踪是在顶部实现的cv::diag(),
    所以它不须要传入的数组是方形的。支持多通道阵列,但跟踪计算为标量,
    所以标量的每一个份量将是最多四个通道的每一个相应通道的总和。

————————————————————————————————————————————————————————————————————————————
cv::transform() ;      |   对数组的每一个元素应用矩阵变换
    |——用法:
    void cv :: transform(
        cv :: InputArray src,
        cv :: OutputArray dst,
        cv :: InputArray mtx
    );
    该函数cv::transform() 可用于计算 任意线性图像变换。 
    它将多通道输入数组src 视为矢量集合,您能够将其视为“通道空间”。
    而后,这些矢量再乘以“小”矩阵,mtx 以影响此通道空间中的变换。
    在mtx 由于有通道矩阵必须有尽量多的行src ,或数字加一。
    在第二种状况下,信道空间矢量insrc自动扩展1,并将值1.0分配给扩展元素

————————————————————————————————————————————————————————————————————————————
cv::transpose() ;       |   在对角线上转置数组的全部元素
    |——用法:
    void cv :: transpose(
        cv :: InputArray src,//输入数组,2维,n-by-m
        cv :: OutputArray dst,//结果数组,2维,m-by-n
    );
    cv::transpose() 将每一个元素复制src到dst经过反转行和列索引指示 的位置。
    该功能支持多通道阵列; 可是,若是您使用多个通道来表示复数,
    请记住这cv::transpose()不会执行复杂的共轭。

————————————————————————————————————————————————————————————————————————————

【说明】:

在这些功能中,遵循一些通常规则。若是存在任何异常,则在功能描述中注明。因为这些规则中的一个或多个适用于本章所述的几乎全部功能,所以为方便起见,此处列出了这些规则:

[饱和]Saturation
计算输出是饱和铸造的 到了 输出数组的类型。
[输出]Output
若是输出数组cv::Mat::create() 的类型和大小与所需的类型或大小不匹配,则将建立输出数组。一般,所需的输出类型和大小与输入相同,可是对于某些功能,大小可能不一样(例如cv::transpose )或类型可能不一样(例如cv::split )。
[标量]Scalars
许多函数,例如cv::add() 容许添加两个数组或一个数组和一个标量。在原型使选项清晰的状况下,提供标量参数的结果与在每一个元素中为第二个数组提供相同标量值的结果相同。
[掩模]Masks
每当函数存在掩码参数时,将仅为那些与输出数组中该元素对应的掩码值非零的元素计算输出。
[dtype]
许多算术和相似函数不要求输入数组的类型相同,即便它们相同,输出数组也能够是与输入不一样的类型。在这些状况下,输出数组必须明确指定其深度。这是经过dtype 参数完成的。当存在时,dtype 能够设置为任何基本类型(例如,CV_32F ),结果数组将是该类型。若是输入数组具备相同的类型,则dtype 能够将其设置为其默认值-1 ,而且结果类型将与输入数组的类型相同。
[就地操做]In-place operation
除非另有说明,不然任何具备相同大小和类型的数组输入和数组输出的操做均可以对二者使用相同的数组(即,容许在输入的顶部写入输出)。
[多通道]Multichannel
对于那些不天然地使用多个通道的操做,若是给定多通道参数,则每一个通道单独处理。




[例]从src2中的(0,0)开始将ROI与从src1中的(x,y)开始的ROI进行alpha混合的完整程序
// alphablend <imageA> <image B> <x> <y> <width> <height> <alpha> <beta>
//
#include <cv.h>
#include <highgui.h>

int main(int argc,char ** argv){

  cv :: Mat src1 = cv :: imread(argv [1],1);
  cv :: Mat src2 = cv :: imread(argv [2],1);

  if(argc == 9 &&!src1.empty()&&!src2.empty()){

    int x = atoi(argv [3]);
    int y = atoi(argv [4]);
    int w = atoi(argv [5]);
    int h = atoi(argv [6]);
    double alpha =(double)atof(argv [7]);
    double beta =(double)atof(argv [8]);

    cv :: Mat roi1(src1,cv :: Rect(x,y,w,h));  cv :: Mat roi2(src2,cv :: Rect(0,0,w,h));

    cv :: addWeighted(roi1,alpha,roi2,beta,0.0,roi1);

    cv :: namedWindow(“Alpha Blend”,1);
    cv :: imshow(“Alpha Blend”,src2);
    cv :: waitKey(0);
  }

  return 0 ;
}
相关文章
相关标签/搜索