【从零学习OpenCV 4】Mat类构造与赋值

本文详细介绍了OpenCV 4中Mat类的构造和赋值方法,包括默认构造、根据尺寸和类型构造、利用已有矩阵构造,以及赋值方式如构造时赋值、枚举赋值法、循环赋值、类方法赋值和利用数组赋值。这些方法在图像处理和计算机视觉项目中经常使用。
摘要由CSDN通过智能技术生成

本文首发于“小白学视觉”微信公众号,欢迎关注公众号

本文作者为小白,版权归人民邮电出版社所有,禁止转载,侵权必究!


经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍《OpenCV 4开发详解》。为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通,提前在公众号上连载部分内容,请持续关注小白。

前一小节已经介绍了三种构造Mat类变量的方法,但是后两种没有给变量初始化赋值,本小节将重点介绍如何灵活的构造并赋值Mat类变量。根据OpenCV的源码定义,关于Mat类的构造方式共有二十余种,然而在平时一些简单的应用程序中很多复杂的构造方式并没有太多的用武之地,因此本书重点讲解笔者在学习和做项目中常用的构造与赋值方式。

Mat类的构造

(1)利用默认构造函数

代码清单2-4 默认构造函数使用方式
cv::Mat::Mat();

通过代码清单2-4,利用默认构造函数构造了一个Mat类,这种构造方式不需要输入任何的参数,在后续给变量赋值的时候会自动判断矩阵的类型与大小,实现灵活的存储,常用于存储读取的图像数据和某个函数运算输出结果。

(2)根据输入矩阵尺寸和类型构造

代码清单2-5 利用矩阵尺寸和类型参数构造Mat类
cv::Mat::Mat( int  rows,
              int  cols,
              int  type
             )

rows:构造矩阵的行数

cols:矩阵的列数

type:矩阵中存储的数据类型。此处除了CV_8UC1、CV_64FC4等从1到4通道以外,还提供了更多通道的参数,通过CV_8UC(n)中的n来构建多通道矩阵,其中n最大可以取到512.

这种构造方法我们前文也见过,通过输入矩阵的行、列以及存储数据类型实现构造。这种定义方式清晰、直观、易于阅读,常用在明确需要存储数据尺寸和数据类型的情况下,例如相机的内参矩阵、物体的旋转矩阵等。利用输入矩阵尺寸和数据类型构造Mat类的方法存在一种变形,通过将行和列组成一个Size()结构进行赋值,代码清单2-6中给出了这种构造方法的原型。

代码清单2-6 用Size()结构构造Mat类
cv::Mat::Mat(Size size(),
             int  type
             )

size:2D数组变量尺寸,通过Size(cols, rows)进行赋值。

type:与代码清单2-5中的参数一致

利用这种方式构造Mat类时要格外注意,在Size()结构里矩阵的行和列的顺序与代码清单2-5中的方法相反,使用Size()时,列在前、行在后。如果不注意同样会构造成功Mat类,但是当我们需要查看某个元素时,我们并不知道行与列颠倒,就会出现数组越界的错误。使用该种方法构造函数如下:

代码清单2-7 用Size()结构构造Mat示例
cv::Mat a(Size(480, 640), CV_8UC1); //构造一个行为640,列为480的单通道矩阵
cv::Mat b(Size(480, 640), CV_32FC3); //构造一个行为640,列为480的3通道矩
  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小白学视觉

您的赞赏是我们坚持下去的动力~

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

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

打赏作者

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

抵扣说明:

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

余额充值