【opencv图像处理之mat类(一)】

mat类的mat是matrix,代表矩阵或者数组

Mat(int rows, int cols, int type)

rows代表行数,cols代表列数,type代表通道数和数据类型
先使用成员函数at访问m中的所有值并打印

#include<opencv2/core/core.hpp>
using namespace cv;
#include<isotream>
int main(int argc, char *argv[]){

   Mat m = (Mat_<int>(3, 2) << 11, 12, 33, 43,51, 16);
   
   for (int r = 0 ; r <m.rows; r++){
        for(int c =0 ; c <m.cols; c++){
             cout<< m.at<int>(r, c) << ","
             }
             cout << endl;}
             }

最后打印结果是
11, 12,
33, 43,
51, 16,
几种成员函数的使用不作赘述,接下来说矩阵的运算,加法,减法,点乘,点除,乘法
一。矩阵的加法

Mat src1 = (Mat_<uchar>(2, 3) << 23,  123, 90, 100,  250 , 0):
Mat src2 = (Mat_<uchar>(2, 3)<< 125, 150, 60 , 100, 10 , 40);
Mat dst =src1 +src2;

输出
148,255, 150
200, 255, 140
其中把最大的273显示成为了255, 因为uchar类型最大是255,自动截断了
规则就是,相同类型的矩阵,相应位置相加,
对于不同类型的矩阵相加,可以用add函数

Mat dst;
add(scr1, scr2, dst, Mat(), CV_64FC1);

打印结果
148, 255, 150
200, 255, 40
二,矩阵的减法

void subtract(InputArray scr1, InputArray scr2, OutputArray dst,int dtype = -1)

和add()函数类似,只有矩阵类型一致的时候才可以dtype=-1;
三,点乘
矩阵的点乘就是利用矩阵的成员函数mul,而且两个Mat对象的数据类型必须相同才能进行点乘,返回的矩阵的数据类型也不变

Mat dst =scr1.mul(scr2);

这里也可以利用opencv的函数

void multiply(InputArray scr1, InputArray scr2,OutputArray dst, double scale = 1,int dtype = -1)

通过dtype指定输出的数据类型
四,点除运算
点除和点乘类似,都是对应位置的数据做运算,两个Mat的点除,出来也是相同类型的Mat,使用“/”运算符

Mat dst = src2/scr1;
for(int r = 0;	r<dst.rows; r++){
            for (int c = 0 ; c<dst.clos;c++){
                      cout << float(dst.at<uchar>(r, c)) <<"," //打印值
                      }
                      cout << endl;
                      }
            

5, 1, 1,
1, 0 ,0,
最后一个数是40/0,opencv默认分母为0 结果也是0;
五, 矩阵的相乘,这个相乘的运算线代里有,而且对于图像处理里比较少见,就不讨论了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值