《OpenCV 4计算机视觉项目实战 》 —2.6 图像和矩阵

举报
华章计算机 发表于 2019/11/10 10:23:59 2019/11/10
【摘要】 本节书摘来自华章计算机《OpenCV 4计算机视觉项目实战》 一书中第二章,第2.6节,作者[西班牙]大卫·米兰·埃斯克里瓦(David Millán Escrivá)[西班牙]维尼休斯·G.门东萨(Vinícius G. Mendon。

2.6 图像和矩阵

毫无疑问,计算机视觉中最重要的结构是图像。计算机视觉中的图像是用数字设备捕获的物理世界的表示。这种图片只是以矩阵格式存储的一系列数字(参见图2-1)。每个数字是所考虑的波长(例如,彩***像中的红色、绿色或蓝色)或波长范围(对于全色设备)的光强度的测量结果。图像中的每个点都称为像素(对于图像元素),并且每个像素可以存储一个或多个值,这取决于它是否是仅存储一个值的黑白图像(也称为二进制图像,比如只存储0或1),还是存储两个值的灰度图像,或者是存储三个值的彩***像。这些值通常在整数0~255,但也可以使用其他范围,比如在高动态范围成像(high dynamic range imaging,简称HDRI)或热图像领域中的浮点数0~1。

图像是以矩阵格式存储的,其中的每个像素都有一个位置,并且可以通过列和行的编号来引用。OpenCV用Mat类来达到这个目的。在灰度图像中,使用单个矩阵,如图2-2所示。

在如图2-3所示的彩***像中,使用了一个宽度×高度×颜色通道数的矩阵。

 image.png

图 2-1

 image.png

图 2-2

 image.png

图 2-3

但Mat类不仅仅用于存储图像,它还能存储任何类型和不同大小的矩阵。你可以将其用作代数矩阵并用它执行运算。在接下来的内容中,我们将描述最重要的矩阵运算,例如加法、乘法、对角化。但是,在此之前,了解矩阵如何存储在计算机内存中是非常重要的,因为直接访问内存,总比用OpenCV函数访问每个像素更加高效。

在内存中,矩阵被保存为按列和行排序的数组或值序列。表2-1显示BGR图像格式的像素序列。

表2-1 BGR图像在内存中的存储格式

image.png

按照这个顺序,我们可以通过以下公式来访问任何像素:

 image.png

OpenCV函数非常适合用于随机访问,但有时直接访问内存(使用指针运算)更有效,例如,当我们必须在循环中访问所有像素时。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。