opencv中灰度图实际在理论内存中的布局,如下图
其中的每个小格子就是一个图像中的像素值。0-255
opencv中彩色图实际在理论内存中的布局,如下图
img = cv2.imread('xxx.jpg')
print(img.shape)
输出的图像 shape 为 H * W * 3,即 高度 * 宽度 * 3通道 或者 行数 * 列数 * 3通道
图像的 shape 为 (1080, 1920, 3),第一维 1080 表示有 1080 行,所以有 1080 个小的二维矩阵,每个二维矩阵是三通道图像中的一行
在的每一个小矩阵中,有 1920 行,每一行有 3 列,每一行的三个像素值就对应当前位置的 B G R 三个通道.
如何读取彩色图像的每个通道的值呢?
可以使用表达式访问数组内的值。例如,可以使用 image[0,0,0]访问图像 image 的 B 通道
内的第 0 行第 0 列上的像素点,式中:
第 1 个索引表示第 0 行
第 2 个索引表示第 0 列
第 3 个索引表示第 0 个颜色通道
根据上述分析可知,假设有一个红色(其 R 通道值为 255,G 通道值为 0,B 通道值为 0)
图像,不同的访问方式得到的值如下。
img[0,0]:访问图像 img 第 0 行第 0 列像素点的 BGR 值。图像是 BGR 格式的,得到的
数值为[0,0,255]。
img[0,0,0]:访问图像 img 第 0 行第 0 列第 0 个通道的像素值。图像是 BGR 格式的,所
以第 0 个通道是 B 通道,会得到 B 通道内第 0 行第 0 列的位置所对应的值 0。
img[0,0,1]:访问图像 img 第 0 行第 0 列第 1 个通道的像素值。图像是 BGR 格式的,所
以第 1 个通道是 G 通道,会得到 G 通道内第 0 行第 0 列的位置所对应的值 0。
img[0,0,2]:访问图像 img 第 0 行第 0 列第 2 个通道的像素值。图像是 BGR 格式的,所
以第 2 个通道是 R 通道,会得到 R 通道内第 0 行第 0 列的位置所对应的值 255。