从本篇开始整理下opencv实现的矩阵计算相关函数使用。

矩阵初始化

具体代码

  这里初始化了两个3X3矩阵,并将它的数据显示出来:
<pre name="code" class="cpp">double x[3][3] = {{1, 50, -100}, {1, -110, 220}, {-1, 150, 150}};
double y[3][3] = {{1, 0, 0}, {0, 1, 0}, {0, 0, 1}};void showMatdate(Mat tmpMat){int i, j;CvScalar s1;Width = tmpMat.rows;Height = tmpMat.cols;IplImage tmp;tmp = tmpMat;for(i=0; i< Width; i++){for(j=0; j<Height; j++){s1 = cvGet2D(&tmp, i, j);printf("%0.1lf  ", s1.val[0]);}printf("\n");}printf("\n\n");
}int main(int argc, char *argv[]){/*************初始化矩阵*****************************/mat1 = Mat(3, 3, CV_64FC1, x);src1 = mat1;mat2 = Mat(3, 3, CV_64FC1, y);src2 = mat2;
/*************显示矩阵数据***************************/printf("mat1:\n");showMatdate(mat1);printf("mat2:\n");showMatdate(mat2);return 0;
}

结果显示

      

矩阵绝对值之差

具体代码

<pre name="code" class="cpp">/*************两个矩阵绝对值之差*********************/mat3 = Mat(3, 3, CV_64FC1);src3 = mat3;cvAbsDiff(&src1, &src2, &src3);printf("cvAbsDiff(mat1, mat2):\n");showMatdate(mat3);

结果显示

       

矩阵与数值差的绝对值

具体代码

<pre name="code" class="cpp">/*************矩阵与数值差的绝对值*******************/mat3 = Mat(3, 3, CV_64FC1);src3 = mat3;cvAbsDiffS(&src1, &src3, Scalar(5));printf("cvAbsDiffS(mat1, 5):\n");showMatdate(mat3);

结果显示

        

矩阵相加

具体代码

<pre name="code" class="cpp">/************两个矩阵相加***************************/mat3 = Mat(3, 3, CV_64FC1);src3 = mat3;cvAdd(&src1, &src2, &src3);printf("cvAdd(mat1, mat2):\n");showMatdate(mat3);

结果显示

        

矩阵权重相加

具体代码

<pre name="code" class="cpp">/**********两个矩阵以权重形式相加******************/mat3 = Mat(3, 3, CV_64FC1);src3 = mat3;cvAddWeighted(&src1, 0.5, &src2, 0.5, 3, &src3);printf("cvAddWeighted(mat1, 0.5,mat2, 0.5, 3):\n");showMatdate(mat3);
  计算公式为
:src3 = src1 * 0.5 + src2 * 0.5 + 3;

结果显示

        

矩阵的与计算

具体代码

<pre name="code" class="cpp">/*******************矩阵与计算**********************
*******可以使用掩码来决定计算被的数据元素*********
*******对应的还有cvNot cvOr cvXor *****************/mat3 = Mat(3, 3, CV_64FC1);src3 = mat3;cvAnd(&src1, &src2, &src3);printf("cvAnd(mat1, mat2):\n");showMatdate(mat3);

结果显示

        

矩阵比较

具体代码

<pre name="code" class="cpp">/******************两个矩阵比较********************/int tmp = CMP_EQ;mat3 = Mat(3, 3, CV_8UC1);src3 = mat3;mat1.convertTo(mat1, CV_8UC1);mat2.convertTo(mat2, CV_8UC1);cvCmp(&src1, &src2, &src3, tmp);printf("cvCmp(mat1, mat2):\n");showMatdate(mat3);
  需要先把mat1和mat2转换为格式CV_8UC1,然后室友函数cvCmp进行比较。注意cvCmp的flag标志,本例使用的是相等:CMP_EQ,也就是将mat1和mat2
矩阵对应位置的数值比较,如果相等,则mat3对应位置数值设置为255,否则设置为0。对应的flag有:
<pre name="code" class="cpp">CMP_EQ src1 is equal to src2.
CMP_GT src1 is greater than src2.
CMP_GE src1 is greater than or equal to src2.
CMP_LT src1 is less than src2.
CMP_LE src1 is less than or equal to src2.
CMP_NE src1 is unequal to src2.

结果显示

        

计算矩阵绝对值

具体代码

<pre name="code" class="cpp">/******************计算绝对值************************/mat3 = Mat(3, 3, CV_8UC1);src3 = mat3;cvConvertScaleAbs(&src1, &src3, 0.5, 4);printf("cvConvertScaleAbs(mat1, 0.5, 4):\n");showMatdate(mat3);注意:mat3 = | mat1 * 0.5 + 4 |;

结果显示

        

计算矩阵非0元素个数

具体代码

<pre name="code" class="cpp">/****************计算矩阵非0元素的个数***************/int sum = 0;showMatdate(mat2);sum = cvCountNonZero(&src2);printf("sum=%d\n", sum);

结果显示

        

矩阵除法计算

具体代码

<pre name="code" class="cpp">double x[3][3] = {{1, 50, -100}, {1, -110, 220}, {-1, 150, 150}};
double y[3][3] = {{1, 0, 0}, {0, 2, 0}, {0, 0, 3}};/*****************数组除法运算************************/mat3 = Mat(3, 3, CV_64FC1);src3 = mat3;cvDiv(&src1, &src2, &src3, 2);printf("cvDiv(mat1, mat2, 2)\n");showMatdate(mat3);注意:1、mat3 = mat1 * 2 / mat2。2、如果矩阵中mat2某一位为0,则mat3对应那一位的结果直接为0。

结果显示

        

矩阵行列式计算

具体代码

<pre name="code" class="cpp">/*****************矩阵行列式计算**********************/double sum = 0;sum = cvDet(&src1);showMatdate(mat1);printf("cvDet(mat1)=%.1lf\n", sum);

结果显示

        

矩阵元素指数计算

具体代码

<pre name="code" class="cpp">/*****************矩阵元素指数计算**********************/mat3 = Mat(3, 3, CV_64FC1);src3 = mat3;cvExp(&src1, &src3);printf("cvExp(mat1)\n");showMatdate(mat3);计算公式如下:

结果显示[编辑 | 编辑源代码]

矩阵水平/垂直翻转

具体代码

<pre name="code" class="cpp">/*****************矩阵水平或者垂直翻转**********************/mat3 = Mat(3, 3, CV_64FC1);src3 = mat3;cvFlip(&src1, &src3, -1);printf("cvFlip(mat1, -1)\n");showMatdate(mat3);cvFlip(&src1, &src3, 0);printf("cvFlip(mat1, 0)\n");showMatdate(mat3);cvFlip(&src1, &src3, 1);printf("cvFlip(mat1, 1)\n");showMatdate(mat3);
     注意:在cvFlip中,当flag小于0时,水平垂直都翻转;flag为0时,垂直翻转;flag大于0时,水平翻转。

opencv矩阵运算(1)相关推荐

  1. OpenCV矩阵运算总结

    转载:https://blog.csdn.net/iracer/article/details/51296631 OpenCV的基本矩阵操作与示例 目录 OpenCV的基本矩阵操作与示例 1. 创建与 ...

  2. OpenCV矩阵运算

    矩阵处理 1.矩阵的内存分配与释放 (1) 整体上: OpenCV 使用C语言来进行矩阵操作.只是实际上有非常多C++语言的替代方案能够更高效地完毕. 在OpenCV中向量被当做是有一个维数为1的N维 ...

  3. OpenCV矩阵运算之顶点法向量计算

    OpenCV进行顶点法向量计算 先介绍一下我接触此题的背景.我需要将一个.obj文件中的vn即顶点法向量计算出来.现在有的数据是f(三角面片索引),v(顶点坐标),但是网上找的代码不是很多,逻辑也不是 ...

  4. 树莓派下载OpenCV

    文章目录 前言 本文前提 安装步骤 步骤1/4:安装依赖项 步骤2/4:安装python虚拟环境(可选) 步骤3/4:安装opencv 步骤4/4:测试是否安装成功 参考链接 前言 安装OpenCV有 ...

  5. opencv中mat详细解析

    ##1.起源 OpenCV作为强大的计算机视觉开源库,很大程度上参考了MatLab的实现细节和风格,比如说,在OpenCV2.x 版本以后,越来越多的函数实现了MatLab具有的功能,甚至干脆连函数名 ...

  6. opencv计算两数组的乘积_opencv矩阵运算(2)

    简单介绍 本篇承接上一篇.继续opencv下矩阵计算的函数使用. 计算矩阵的逆 注意:矩阵A是可逆矩阵的充分必要条件是行列式detA不等于0. 详细代码 double x[3][3] = {{1, 2 ...

  7. 基于C++的opencv中Mat矩阵运算方法总结

    文章目录 前言 一.Mat运算种类 1.1 代数运算 1.2 类型转换 前言 Mat类是目前opencv最为常用的图像数据格式,其优点在于无需手动开辟内存空间和实时释放,针对此类的各种运算方法有很多, ...

  8. OpenCV学习】矩阵运算和操作2

    #include "cv.h" #include "highgui.h" #include <stdio.h> void PrintMat(CvMa ...

  9. OpenCV 笔记(06)— Mat 结构、像素值存储方法、创建 Mat 对象各种方法、Mat 对象的运算

    数字图像中的每个点都称为像素(对于图像元素),并且每个像素可以存储一个或多个值,这取决于它是否是仅存储一个值的黑白图像(也称为二进制图像,比如只存储0或1),还是存储两个值的灰度图像,或者是存储三个值 ...

最新文章

  1. 一.vtun源码学习笔记
  2. js图片压缩并上传?
  3. 微软资深软件工程师:阅读代码真的很难
  4. 云服务器怎么拷贝和删除文件,怎样给云服务器拷贝文件
  5. 调整cisco参数设置
  6. 在云服务器上持续运行springboot项目
  7. 取代java_为什么C++没有被java取代
  8. Vue执行动画(transition)
  9. 计算机专业的推荐信,推荐信样例(计算机专业)
  10. WPF编程学习 —— 样式
  11. Kotlin入门(20)几种常见的对话框
  12. 咏南中间件+开发框架中秋国庆大促
  13. 我的世界服务器修改npc,我的世界npc修改对话框 | 手游网游页游攻略大全
  14. coreldraw x7如何禁网_出现问题如何修改和修复安装coreldraw x7
  15. discuz发帖流程_discuz 帖子模块用到的表及自动发帖函数
  16. Nexus3搭建jenkins报错 下载 依赖jar包 报错Not authorized
  17. Ubuntu 16.04下安装Preempt_rt
  18. kali linux 账号管理
  19. IP地址转换(c语言)
  20. 献给java初学者,非常适合新手练习的Java项目

热门文章

  1. AppLaunchScreen/Screenshot(启动图/屏幕快照)输出规范
  2. Kotlin系列之类和属性
  3. C#二进制与字符串之间的相互转换
  4. Bitmap 索引 vs. B-tree 索引:如何选择以及何时使用?——4-5
  5. 多VLAN环境下DHCP服务的实现
  6. NIO中的SelectionKey
  7. java pdfreader去除水印_(最新)JAVA使用Icepdf 5.0.6 pro的PDF转图片去掉水印的方法...
  8. Opencv-Python部署SIFT函数问题的处理
  9. 机器学习笔记(十二)计算学习理论
  10. 2012年初二晚越秀公园游灯有感一二