本文首发于“小白学视觉”微信公众号,欢迎关注公众号
本文作者为小白,版权归人民邮电出版社所有,禁止转载,侵权必究!
经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍《OpenCV 4开发详解》。为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通,提前在公众号上连载部分内容,请持续关注小白。
对于Mat类矩阵的读取与更改,我们已经在矩阵的循环赋值中见过如何用at方法对矩阵的每一位进行赋值,这只是OpenCV提供的多种读取矩阵元素方式中的一种,本小节将详细介绍如何读取Mat类矩阵中的元素,并对其数值进行修改。在学习如何读取Mat类矩阵元素之前,首先需要知道Mat类变量在计算机中是如何存储的。多通道的Mat类矩阵是一个类似于三维的数据,而计算机的存储空间是一个二维空间,因此Mat类矩阵在计算机存储时是将三维数据变成二维数据,先存储第一个元素每个通道的数据,之后再存储第二个元素每个通道的数据。每一行的元素都按照这种方式进行存储,因此如果我们找到了每个元素的起始位置,便可以找到这个元素中每个通道的数据。图2-5展示了一个三通道的矩阵的存储方式,其中连续的蓝色、绿色和红色的方块分别代表每个元素的三个通道。
![](https://i-blog.csdnimg.cn/blog_migrate/44d977c3b2eed5fd61376f7c6e13b3f1.png)
了解了Mat类变量的存储方式之后,我们来看一下Mat类具有的属性,我们在表2-2中列出了常用的属性,同时详细的介绍了每种属性的作用。
![](https://i-blog.csdnimg.cn/blog_migrate/be09f9c7bcfb9db4675a47e74dff1edb.png)
这些属性之间互相组合可以得到多数Mat类矩阵的属性,例如step属性与c