数组索引越界求助:axis 1索引128超出维度大小128
索引越界错误排查与解决
错误原因
你的代码触发索引越界是因为:
- 当
i遍历到原图像I的最后一行(即i = I.shape[0]-1)时,代码尝试访问I[i+1,j],此时i+1等于I.shape[0],超出了数组的合法索引范围(数组索引从0开始,最大索引为shape值-1)。 - 同理,当
j遍历到原图像的最后一列时,I[i,j+1]的j+1也会超出边界,导致报错。
修复方案
1. 调整循环范围
将i和j的循环终止条件改为原图像尺寸减1,避免访问超出边界的索引:
import numpy as np # 假设I是输入图像数组,scale是缩放因子 # 预先创建放大后的图像数组(如果是scale倍放大) New_img = np.zeros((I.shape[0]*scale, I.shape[1]*scale), dtype=I.dtype) for i in range(I.shape[0] - 1): for j in range(I.shape[1] - 1): for k in range(scale): for l in range(scale): a = k / scale b = l / scale # 计算双线性插值结果 val = round((1-a)*(1-b)*I[i,j] + (1-a)*b*I[i+1,j] + a*(1-b)*I[i,j+1] + a*b*I[i+1,j+1]) # 赋值到放大后的对应像素位置 New_img[i*scale + k, j*scale + l] = val
2. 额外修正(针对图像放大需求)
原代码中New_img[i,j]的赋值位置逻辑错误,如果你是要实现scale倍图像放大,需要将插值结果赋值到放大后的对应坐标i*scale + k和j*scale + l,同时提前创建对应尺寸的New_img数组。
内容的提问来源于stack exchange,提问作者Ehtaysham ur Rehman
相关产品推荐
相关产品推荐

