首页 > 解决方案 > Python中多维numpy数组的索引

问题描述

假设我有一个这样的numpy数组, l = np.array([[[1, 2, 3]], [[1, 2, 3]]])
那么, l.shape = (2, 1, 3)
也就是说,在l[x][y][z]中,x代表深度,y代表行数,z代表列数。C 语言也遵循同样的约定。

现在,如果我使用 OpenCV 读取图像,

img = cv2.imread('l.PNG')

因此, img.shape = (798, 679, 3)
其中 3 是深度 (RGB),798 是长度(行),679 是图像的宽度(列)。
我不明白为什么这两种情况都不同。请帮忙。

标签: pythonnumpyopencv

解决方案


一对括号[]为您提供矢量。

当您在向量内嵌套括号时,[ [a],[b],[c] ]您会得到二维数组(别名矩阵),它可以表示为:

[a]  # 2d array with 3 rows
[b]
[c]

图像只是二维数组。嵌套括号内的项目数表示矩阵的列数。以下:[ [1,2],[3,2],[2,3] ]表示 2d 矩阵,具有 3 行和 2 列。

因为调用 imread 来读取带有颜色的图像,所以需要一个嵌套列表来表示颜色分量:B、G、R。所以你有[ [ [b,g,r] ], [b,g,r,], [b,g,r] ] ]这个最里面的列表包含图像的深度。

在符号中[x][y][z]

  • x 是行
  • y 是 col
  • z 是深度,颜色分量

推荐阅读