在Python中为NumPy图像数组编制索引时出错

在Python中为NumPy图像数组编制索引时出错,python,arrays,opencv,numpy,indexing,Python,Arrays,Opencv,Numpy,Indexing,我用Python2.7、Numpy和OpenCV编写了一个程序,从我的网络摄像头中抓取一张照片,并给出每个像素的rgb值。在640x480像素照片上运行代码后: for x in range(638): for y in range(478): red, green, blue = image[x, y] print(red, green, blue) 我收到错误消息: red, green, blue = image[x, y] IndexError:

我用Python2.7、Numpy和OpenCV编写了一个程序,从我的网络摄像头中抓取一张照片,并给出每个像素的rgb值。在640x480像素照片上运行代码后:

for x in range(638):
    for y in range(478):
        red, green, blue = image[x, y]
        print(red, green, blue)
我收到错误消息:

red, green, blue = image[x, y]
IndexError: index 480 is out of bounds for axis 0 with size 480

有人知道这是为什么吗?

简短的回答是640x480图像具有形状
(480640,n_通道)
。如果将代码更改为
image[y,x]
,则不会出现此错误。如果您将代码编写为:

for row in range(image.shape[0]):
    for col in range(image.shape[1]):
      r, g, b = image[row, col]

这里有一个教程,向您展示了如何高效地执行一些操作,并提供了有关索引约定的一些详细信息。

480是从0到479。是的,我知道,在numpy和opencv中它是[y,x]。另外,请不要像那样迭代像素,它非常慢,容易出错,完全违背了高级库的目的。顺便说一句,像素顺序是b g r,而不是r g b