Mat 表达式
2016-07-19 11:48
337 查看
利用 C++中的运算符重载,OpenCV 2 中引入了 Mat 运算表达式。这一新特
点使得使用 C++进行编程时,就如同写 Matlab 脚本,代码变得简洁易懂,也便于
维护。
如果矩阵 A 和 B 大小相同,则可以使用如下表达式:
C = A + B + 1;
其执行结果是 A 和 B 的对应元素相加,然后再加 1,并将生成的矩阵赋给 C
变量。
下面给出 Mat 表达式所支持的运算。下面的列表中使用 A 和 B 表示 Mat 类
型的对象,使用 s 表示 Scalar 对象,alpha 表示 double 值。
加法,减法,取负:A+B,A-B,A+s,A-s,s+A,s-A,-A
缩放取值范围:A*alpha
矩阵对应元素的乘法和除法: A.mul(B),A/B,alpha/A
矩阵乘法:A*B (注意此处是矩阵乘法,而不是矩阵对应元素相乘)
矩阵转置:A.t()
矩阵求逆和求伪逆:A.inv()
矩阵比较运算:A cmpop B,A cmpop alpha,alpha cmpop A。此处 cmpop
可以是>,>=,==,!=,<=,<。如果条件成立,则结果矩阵(8U 类型矩
阵)的对应元素被置为 255;否则置 0。
矩阵位逻辑运算:A logicop B,A logicop s,s logicop A,~A,此处 logicop
可以是&,|和^。
34 矩阵对应元素的最大值和最小值:min(A, B),min(A, alpha),max(A, B),
max(A, alpha)。
矩阵中元素的绝对值:abs(A)
叉积和点积:A.cross(B),A.dot(B)
下面例程展示了 Mat 表达式的使用方法,例程的输出结果如图 3.8 所示。
#include <iostream>
#include "opencv2/opencv.hpp"
using namespace std;
using namespace cv;
int main(int argc,char* argv[])
{
Mat A=Mat::eye(4,4,CV_32SC1);
Mat B=A*3+1;
Mat C=B.diag(0)+B.col(1);
cout<<"A="<<A<<endl<<endl;
cout<<"B="<<B<<endl<<endl;
cout<<"C="<<C<<endl<<endl;
cout<<"C .* diag(B) = " << C.dot(B.diag(0)) << endl;
return 0;
}
//92=4*5+4*8+4*5+4*5 即B矩阵中的对角元素与C矩阵的对角元素相乘再相加
点使得使用 C++进行编程时,就如同写 Matlab 脚本,代码变得简洁易懂,也便于
维护。
如果矩阵 A 和 B 大小相同,则可以使用如下表达式:
C = A + B + 1;
其执行结果是 A 和 B 的对应元素相加,然后再加 1,并将生成的矩阵赋给 C
变量。
下面给出 Mat 表达式所支持的运算。下面的列表中使用 A 和 B 表示 Mat 类
型的对象,使用 s 表示 Scalar 对象,alpha 表示 double 值。
加法,减法,取负:A+B,A-B,A+s,A-s,s+A,s-A,-A
缩放取值范围:A*alpha
矩阵对应元素的乘法和除法: A.mul(B),A/B,alpha/A
矩阵乘法:A*B (注意此处是矩阵乘法,而不是矩阵对应元素相乘)
矩阵转置:A.t()
矩阵求逆和求伪逆:A.inv()
矩阵比较运算:A cmpop B,A cmpop alpha,alpha cmpop A。此处 cmpop
可以是>,>=,==,!=,<=,<。如果条件成立,则结果矩阵(8U 类型矩
阵)的对应元素被置为 255;否则置 0。
矩阵位逻辑运算:A logicop B,A logicop s,s logicop A,~A,此处 logicop
可以是&,|和^。
34 矩阵对应元素的最大值和最小值:min(A, B),min(A, alpha),max(A, B),
max(A, alpha)。
矩阵中元素的绝对值:abs(A)
叉积和点积:A.cross(B),A.dot(B)
下面例程展示了 Mat 表达式的使用方法,例程的输出结果如图 3.8 所示。
#include <iostream>
#include "opencv2/opencv.hpp"
using namespace std;
using namespace cv;
int main(int argc,char* argv[])
{
Mat A=Mat::eye(4,4,CV_32SC1);
Mat B=A*3+1;
Mat C=B.diag(0)+B.col(1);
cout<<"A="<<A<<endl<<endl;
cout<<"B="<<B<<endl<<endl;
cout<<"C="<<C<<endl<<endl;
cout<<"C .* diag(B) = " << C.dot(B.diag(0)) << endl;
return 0;
}
//92=4*5+4*8+4*5+4*5 即B矩阵中的对角元素与C矩阵的对角元素相乘再相加
相关文章推荐
- 解析在main函数之前调用函数以及对设计的作用详解
- 详解Matlab中 sort 函数用法
- java和matlab画多边形闭合折线图示例讲解
- C#调用Matlab生成的dll方法的详细说明
- 简述Matlab中size()函数的用法
- 从java中调用matlab详细介绍
- 稀疏自动编码器 (Sparse Autoencoder)
- 详解Matlab中 sort 函数用法
- 简述Matlab中size()函数的用法
- VC++与Matlab混合编程的快速实现
- Matlab 矩阵运算
- matlab与opencv部分函数的对照
- matlab神经网络工具箱创建神经网络
- Matlab
- MATLAB 入门教程
- matlab函数_连通区域
- MATLAB中函数模式和命令模式的区别
- MATLAB 添加自定义的模块到simulink库浏览器
- Export Figures for LaTeX Writing