索引错误:索引 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],[-1,-1,-1]]
#filter_matrix = [[-1,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),axis=1)
        matrix = np.append(black,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()

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)