首页 > 解决方案 > IndexError:索引 518 超出轴 0 的范围,大小为 518 站点:stackoverflow.com

问题描述

这是我的代码

我在这行代码中有问题

 row.append(padded_image[i+r][j+s])  

这表明IndexError: index 518 is out of bounds for axis 0 with size 518

import cv2
import numpy as np
from matplotlib import pyplot as plt
img=cv2.imread('2.png')
gray_image = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
gray_image.shape
n = len(gray_image[0])
print(gray_image[0])
filter_matrix = [[1,1,1],[0,0,0],[-1,-1,-1]]
#filter_matrix = [[-1,0,1],[-1,0,1],[-1,0,1]] for vertical edge detector
size_of_filter = 3
stride = 1
padding_size = 5
def convolution(matrix1,matrix2):
    w = 0
    for i in range(size_of_filter):
        for j in range(size_of_filter):
            w+=matrix1[i][j]*matrix2[i][j]
    return w
def add_padding(matrix,padding_size):
    for p in range(padding_size):
        black = np.zeros((1,matrix.shape[1]),dtype='uint8')
        matrix = np.append(matrix,black , axis=0)
        matrix = np.append(black,matrix , axis=0)
        black = np.zeros((matrix.shape[0],1),dtype='uint8')
        matrix = np.append(matrix,black , axis=1)
        matrix = np.append(black,matrix , axis=1)
        
    return matrix
if padding_size>0:
    padded_image = add_padding(gray_image,padding_size)
else:
    padded_image = gray_image
    
n = len(padded_image[0])

reduced_matrix = list()

for i in range(n-size_of_filter+1):
    main_row = list()
    for j in range(n-size_of_filter+1):
        temp_matrix = list()
        for r in range(size_of_filter):
            row = list()
            for s in range(size_of_filter):
                row.append(padded_image[i+r][j+s])  
            temp_matrix.append(row)
        ans = convolution(temp_matrix,filter_matrix)
        main_row.append(ans)
    reduced_matrix.append(main_row)
new_img = np.array(reduced_matrix, dtype='uint8')
new_img.shape
cv2.namedWindow('new_img')
cv2.imshow('gray_image',gray_image)
cv2.imshow('new_img',new_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

标签: indexingsizebounds

解决方案


推荐阅读