OpenCV图像处理开发实战(3) --重要对象Mat的使用

Mat在OpenCV是非常重要的对象,存储图像数据。本例说明Mat的主要使用方法。

1、创建Mat对象

(1)Mat m1,m3;
仅创建了头部信息,所有的值都是0或空值
在这里插入图片描述m1= imread(img_file_name);
(2)Mat m2(m1);
拷贝构造。 以m2的数据初始化m3,两者的数据指针指向同一个内存块。因此,一方修改了图像数据,另一个对象中的数据也会随之改变。
使用引用计数的机制,复制Mat对象的头,矩阵的计数器被增加。每当一个头被清除,此计数器被下调。当该计数器变为零,矩阵也就被释放了。
如下图,两个对象的数据指针data是相同的,说明指向同一个内存。

在这里插入图片描述

2、克隆clone对象Mat

克隆出来的对象与原有对象是独立的,数据缓冲指针不同。其它的描述信息(如高宽信息,颜色,通道数)完全相同。

Mat clone1;
clone1 = m1.clone();

在这里插入图片描述

3、copy对象Mat

与clone方法类似。copy的结果对象与源对象数据区是独立的。其它信息相同。

在这里插入图片描述

4、其它常用的方法

(1) Mat::Create(size, type)函数
创建一个指定信息Mat对象.

(2) Mat::total() 取总像素个数

(3) Mat.depth() 取图像深度

(4) Mat.rows (属性)取图像高度

(5)Mat::cols (属性)取图像宽度

(6) Mat::channles()取图像通道数

(7) Mat::size() 取图像大小

(8) Mat::type() 取图像类型

(9) Mat::empty() 图像判空

(10) Mat::ptr 取行的指针

int row = 10;
uchar* data = m1.ptr<uchar>(row);

(11) Mat::resize 修改图像高度
Mat r;
r= imread(img_file_name);
r.resize(r.rows / 2);

(12) Mat::operator()生成子矩阵

Mat childMat = m1(Rect(m1.cols/4, m1.rows/4, m1.cols *0.7, m1.rows / 2));
在这里插入图片描述

5、工程项目源代码下载

本例在Debug – x64下编译通过。

ZIP包中包含开发环境,可直接编译运行。

下载源程序

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值