OpenCVSharp学习笔记(2)--Mat基本图像容器

本文介绍了OpenCV中Mat类的作用,它用于自动管理内存,解决了C语言中IplImage的内存问题。Mat由矩阵头和指向像素值的指针组成,使用引用计数机制管理内存。文章讨论了Mat的复制(如clone和copyTo方法)、共享以及如何通过不同方法创建和初始化Mat对象,包括设置特定颜色空间和数据类型。此外,还展示了如何格式化输出Mat对象的内容。

1、Mat类型

为解决原C语言中IplImage内存管理问题,引入C++类Mat自动管理内存

Mat类由两个部分组成:

1)矩阵头matrix header(包含矩阵尺寸、存储方法、存储地址等等),矩阵头的尺寸是常数

2)一个指向存储所有像素值的矩阵(所选存储方法的不同可以是不同的维数)的指针matrix pointer,

引用计数制管理Mat对象的内存

每个Mat对象有自己的矩阵头(matrix header),但可能共享的相同图像矩阵(矩阵指针指向相同地址)

copy构造函数,只拷贝矩阵头和矩阵指针,不拷贝图像矩阵

如果要拷贝矩阵用clone或copyTo方法

//读取图像
using var lenaA = Cv2.ImRead(ImagePath.LenaColor, ImreadModes.Color);
if (lenaA.Empty()) return;

//共享图像矩阵
var lenaB = new Mat(lenaA, Range.All, Range.All);
using var lenaC = lenaA;

//获取指定区域图像
using var lenaD = new Mat(lenaA, new Rect(100, 250,370, 180));
using var lenaE = lenaA[new Range(100, 200), Range.All];

//复制图像矩阵
using var lenaF = lenaA.Clone();
using Mat lenaG = new Mat();
lenaA.CopyTo(lenaG);

//修改某个区域为绿
lenaA[new Rect(50, 100, 150, 200)] = new Mat(new Size(150, 200), MatType.CV_8UC3,Scalar.Green);

//显示所有图像
using (new Window("lenaA", lenaA))
using (new Window("lenaB", lenaB))
using (new Window("lenaC", lenaC))
using (new Window("lenaD", lenaD))
using (new Window("lenaE", lenaE))
using (new Window("lenaF", lenaF))
using (new Window("lenaG", lenaG))
{
    Cv2.WaitKey();
}

显示结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

图南科技

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

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

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

打赏作者

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

抵扣说明:

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

余额充值