图像识别与处理之Opencv——Mat表达式的运算(矩阵的一些运算)

    利用 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, slogicop A, ~A,此处 logicop可以是&, |和^。
 矩阵对应元素的最大值和最小值: min(A, B), min(A, alpha), max(A, B),max(A, alpha)。
 矩阵中元素的绝对值: abs(A)
 叉积和点积: A.cross(B), A.dot(B)

    下面例程展示了 Mat 表达式的使用方法,例程的输出结果如后图所示。
#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;
}

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

翟羽嚄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值