《OpenCV 4计算机视觉项目实战 》 —2.6 图像和矩阵
2.6 图像和矩阵
毫无疑问,计算机视觉中最重要的结构是图像。计算机视觉中的图像是用数字设备捕获的物理世界的表示。这种图片只是以矩阵格式存储的一系列数字(参见图2-1)。每个数字是所考虑的波长(例如,彩***像中的红色、绿色或蓝色)或波长范围(对于全色设备)的光强度的测量结果。图像中的每个点都称为像素(对于图像元素),并且每个像素可以存储一个或多个值,这取决于它是否是仅存储一个值的黑白图像(也称为二进制图像,比如只存储0或1),还是存储两个值的灰度图像,或者是存储三个值的彩***像。这些值通常在整数0~255,但也可以使用其他范围,比如在高动态范围成像(high dynamic range imaging,简称HDRI)或热图像领域中的浮点数0~1。
图像是以矩阵格式存储的,其中的每个像素都有一个位置,并且可以通过列和行的编号来引用。OpenCV用Mat类来达到这个目的。在灰度图像中,使用单个矩阵,如图2-2所示。
在如图2-3所示的彩***像中,使用了一个宽度×高度×颜色通道数的矩阵。
图 2-1
图 2-2
图 2-3
但Mat类不仅仅用于存储图像,它还能存储任何类型和不同大小的矩阵。你可以将其用作代数矩阵并用它执行运算。在接下来的内容中,我们将描述最重要的矩阵运算,例如加法、乘法、对角化。但是,在此之前,了解矩阵如何存储在计算机内存中是非常重要的,因为直接访问内存,总比用OpenCV函数访问每个像素更加高效。
在内存中,矩阵被保存为按列和行排序的数组或值序列。表2-1显示BGR图像格式的像素序列。
表2-1 BGR图像在内存中的存储格式
按照这个顺序,我们可以通过以下公式来访问任何像素:
OpenCV函数非常适合用于随机访问,但有时直接访问内存(使用指针运算)更有效,例如,当我们必须在循环中访问所有像素时。
- 点赞
- 收藏
- 关注作者
评论(0)