你有一个截断的数组表示.让我们看一个完整的例子:
>>> a = np.zeros((2, 3, 4))
>>> a
array([[[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]],
[[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]]])
NumPy中的数组打印为单词数组,后跟结构,类似于嵌入式Python列表.让我们创建一个类似的列表:
>>> l = [[[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]],
[[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]]]
>>> l
[[[0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0]],
[[0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0]]]
该复合列表l的第一级正好有2个元素,就像数组a(行数)的第一个维度一样.这些元素中的每一个本身都是一个包含3个元素的列表,它等于a(列数)的第二个维度.最后,大多数嵌套列表每个都有4个元素,与a的第三个维度(深度/颜色数量)相同.
因此,您可以使用与Matlab完全相同的结构(在尺寸方面),只是以其他方式打印.
一些警告:
> Matlab逐列存储数据(“Fortran order”),而NumPy默认按行存储(“C order”).这不会影响索引,但可能会影响性能.例如,在Matlab中,有效循环将在列上(例如,对于n = 1:10 a(:,n)end),而在NumPy中,优选迭代行(例如,对于范围(10)中的n:a [n ,:] – 注意第一个位置的n,而不是最后一个位置.
>如果您在OpenCV中使用彩色图像,请记住:
2.1.它像BGR格式一样存储图像,而不像大多数Python库那样存储RGB.
2.2.大多数函数处理图像坐标(x,y),它们与矩阵坐标(i,j)相反.