码迷,mamicode.com
首页 > 其他好文 > 详细

opencv矩阵运算(3)

时间:2015-07-11 15:08:40      阅读:430      评论:0      收藏:0      [点我收藏+]

标签:opencv   图像处理   

简介

  本篇承接上一篇,继续opencv下矩阵计算的函数使用。

矩阵复制

具体代码

    printf("mat1:\n");
    showMatdate(mat1);
 
    mat3 = Mat(3, 3, CV_64FC1);
    src3 = mat3;
 
    cvRepeat(&src1, &src3);
    printf("cvRepeat(mat1):\n");
    showMatdate(mat3);

结果显示

    技术分享

矩阵比例相加

具体代码

    printf("mat1:\n");
    showMatdate(mat1);
    printf("mat2:\n");
    showMatdate(mat2);
 
    mat3 = Mat(3, 3, CV_64FC1);
    src3 = mat3;
 
    tmp.val[0] = 1.5;
    cvScaleAdd(&src1, tmp, &src2, &src3);
    printf("cvScaleAdd(mat1, tmp, mat2):\n");
    showMatdate(mat3);
   注意:mat3 = mat1 * tmp + mat2;

结果显示

    技术分享

初始化矩阵对角线元素

具体代码

    printf("mat1:\n");
    showMatdate(mat1);
 
    mat3 = Mat(3, 3, CV_64FC1);
    src3 = mat3;
 
    tmp.val[0] = 1.5;
    cvSetIdentity(&src1, tmp);
    printf("cvSetIdentity(mat1, tmp):\n");                                                                                           
    showMatdate(mat1);
   注意:对角线元素初始化为tmp,其他元素为0。

结果显示

    技术分享

三次曲线方程实根

具体代码

    printf("mat2:\n");
    showMatdate(mat2);
 
    mat3 = Mat(1, 3, CV_64FC1);
    src3 = mat3;
 
    CvMat tmp1 = mat2;
    CvMat tmp2 = mat3;
 
    cvSolveCubic(&tmp1, &tmp2);
    printf("cvSolveCubic(mat2):\n");
    showMatdate(mat3);
   注意:实根可以有一个或者三个。

结果显示

    技术分享

矩阵减法

具体代码

    printf("mat1:\n");
    showMatdate(mat1);
    printf("mat2:\n");
    showMatdate(mat2);
 
    mat3 = Mat(3, 3, CV_64FC1);
    src3 = mat3;
 
    cvSub(&src1, &src2, &src3);
    printf("cvSub(mat1, mat2):\n");                                                                                                  
    showMatdate(mat3);
    注意:1、void cvSub(const CvArr* src1, const CvArr* src2, CvArr* dst, const CvArr* mask=NULL)
               最后可以选择掩码控制。
          2、void cvSubRS(const CvArr* src, CvScalar value, CvArr* dst, const CvArr* mask=NULL )
               dst = value - src。
          3、cvSubS(const CvArr* src, CvScalar value, CvArr* dst, const CvArr* mask=NULL)
               dst = src - val。

结果显示

    技术分享

矩阵元素之和

具体代码

    printf("mat1:\n");
    showMatdate(mat1);
 
    tmp = cvSum(&src1);
    printf("cvSum(mat1);%lf\n", tmp.val[0]);

结果显示

    技术分享

对角线元素之和

具体代码

    printf("mat1:\n");
    showMatdate(mat1);
 
    tmp = cvTrace(&src1);
    printf("cvTrace(mat1);%lf\n", tmp.val[0]);

结果显示

    技术分享

计算矩阵转置

具体代码

    printf("mat1:\n");
    showMatdate(mat1);
 
    cvTranspose(&src1, &src3);
    printf("cvTranspose(mat1);\n");
    showMatdate(mat3);

结果显示

    技术分享

其他相关矩阵操作

1、计算向量的协方差:calcCovarMatrix

2、计算二维向量大小和角度:cartToPolar

3、检查输入矩阵中的无效值:checkRange

4、将其他矩阵格式转换为Mat: C++: Mat cvarrToMat(const CvArr* arr, bool copyData=false, bool allowND=true, int coiMode=0 )

5、执行一维或二维数组的正反余弦变换: C++: void dct(InputArray src, OutputArray dst, int flags=0)

6、执行一维或二维数组的正逆傅里叶变换: C++: void dft(InputArray src, OutputArray dst, int flags=0, int nonzeroRows=0)

7、计算对称矩阵的特征值和特征向量: void cvEigenVV(CvArr* mat, CvArr* evects, CvArr* evals, double eps=0, int lowindex=-1, int highindex=-1 )

8、提取所选的图像通道: void extractImageCOI(const CvArr* arr, OutputArray coiimg, int coi=-1 )

9、将一个图像通道数据复制到旧的对应通道中: void insertImageCOI(InputArray coiimg, CvArr* arr, int coi=-1 )

10、执行广义矩阵乘法: void cvGEMM(const CvArr* src1, const CvArr* src2, double alpha, const CvArr* src3, double beta, CvArr* dst, int tABC=0)

11、返回给定矢量的最优DFT大小: C++: int getOptimalDFTSize(int vecsize)

12、返回一个单一像素的转换函数: C++: ConvertData getConvertElem(int fromType, int toType)

13、计算一维或者二维的逆离散余弦变换: C++: void idct(InputArray src, OutputArray dst, int flags=0)

14、计算一维或者而且的逆离散傅里叶变换: C++: void idft(InputArray src, OutputArray dst, int flags=0, int nonzeroRows=0)

15、检查数组元素是否位于其他数组元素之间: C++: void inRange(InputArray src, InputArray lowerb, InputArray upperb, OutputArray dst)

16、向量的透视矩阵变换 void cvPerspectiveTransform(const CvArr* src, CvArr* dst, const CvMat* mat)

17、解决一个或多个线性系统最小二乘法。 int cvSolve(const CvArr* src1, const CvArr* src2, CvArr* dst, int method=CV_LU)

18、执行每个数组元素矩阵变换(可以用在图像旋转)。 void cvTransform(const CvArr* src, CvArr* dst, const CvMat* transmat, const CvMat* shiftvec=NULL )

版权声明:本文为博主原创文章,未经博主允许不得转载。

opencv矩阵运算(3)

标签:opencv   图像处理   

原文地址:http://blog.csdn.net/u011630458/article/details/46841797

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!