为什么我在 python 中的循环出现索引错误?

Why am I getting a index error for my loop in python?

我正在尝试将原始图像分成 8x8 重叠块,以便稍后进行特征提取。

这是我的代码:

new0 = np.zeros((heightimage0R, widthimage0R), np.uint8)
k = 0
for i in range(heightimage0R):
    for j in range(widthimage0R):
        crop_tmp0R = image0R[i:i+8,j:j+8]
        new0[k, 0:64] = crop_tmp0R.flatten()
        k = k + 1

但是,每当我 运行 我的代码出现以下错误时:

Traceback (most recent call last):

  File "<ipython-input-392-cf9c59842d3a>", line 6, in <module>
    new0[k, 0:64] = crop_tmp0R.flatten()

IndexError: index 256 is out of bounds for axis 0 with size 256

我已经在 for 循环中尝试了 widthimage0R-1,但它仍然不起作用。

new0 = np.zeros((heightimage0R, widthimage0R), np.uint8)

这里,new0 的形状是 heightimage0R x widthimage0R

for i in range(heightimage0R):
    for j in range(widthimage0R):
        crop_tmp0R = image0R[i:i+8,j:j+8]
        new0[k, 0:64] = crop_tmp0R.flatten()

这里我们试图访问 new0 的第 k 行,其中 k 上升到 (heightimage0R x widthimage0R)。所以k越过heightimage0R后,肯定是报错

您能否更具体地说明您想要实现的目标?看起来逻辑需要改变。

new0 的大小为 heightimage0Rxwidthimage0R(我现在将其称为 hxw),我假设与 image0R 的大小相同(否则你会遇到更多问题)。

您的代码所做的是从 image0R 中取出一个 8x8 正方形并将其展平到新数组中。

出现问题是因为 new0hxw- 矩阵,但您将其用作 h*wx64-矩阵。这是因为该行的值为 k,介于 0 到 h*w 之间,而该列始终为 64。

我猜你的意思是执行以下操作:

new0 = np.zeros((heightimage0R*widthimage0R, 64), np.uint8)
k = 0
for i in range(heightimage0R-8):  # Don't forget the -8 to not exceed the size of the image0R as well!
    for j in range(widthimage0R-8):
        crop_tmp0R = image0R[i:i+8,j:j+8]
        new0[k, 0:64] = crop_tmp0R.flatten()
        k = k + 1