0
请你看看这个代码,并告诉我什么是错的:的Python>的OpenCV> numpy的>图像处理
import cv2
import numpy as np
import os
OrigLenna = cv2.imread('Lenna.jpg', 1)
Lenna = cv2.imread('Lenna.jpg',0)
cv2.imshow('Original Lenna', OrigLenna) # <3
cv2.waitKey(0)
cv2.imshow('gray Lenna', Lenna)
cv2.waitKey(0)
cv2.destroyAllWindows()
szejp = np.shape(Lenna)
print(szejp)
s_vs_p = 0.5
amount= 0.04
out = Lenna
outs = Lenna
outp = Lenna
# Salt mode
num_salt = np.ceil(amount* Lenna.size * (s_vs_p))
coords = [np.random.randint(0, i - 1, int(num_salt)) # <- i TUTAJ :D
for i in np.shape(Lenna)]
out[coords] = 255
# Pepper mode
num_pepper = np.ceil(amount * Lenna.size * (1.-s_vs_p))
coords= [np.random.randint(0, i - 1, int(num_pepper)) # <- TUTAJ np :D
for i in np.shape(Lenna)]
out[coords]=0
cv2.imshow('salt&pepper',out)
cv2.waitKey(0)
p=100
tym=np.shape(out)
tyma=tym[0]+2*(p-1)
tymb=tym[1]+2*(p-1)
xyz=np.arange(0,2)
xyz[0]=tyma
xyz[1]=tymb
pad=np.zeros(xyz)
for i in range(1, szejp[0]):
for j in range(1, szejp[1]):
pad[i+p-1,j+p-1]=out[i,j]
padd=np.shape(pad)
for i in range(1,(padd[0]-(p-1))):
for j in range(1,(padd[1]-(p-1))):
kernel = np.ones(((p - 1) ** 2, 1))
t=1
for x in range(1,p-1):
for y in range(1,p-1):
kernel[t]=pad[i+x-1, j+y-1]
t=t+1
filt=np.sort(kernel)
out[i,j]=filt[1];
plt.imshow(filt)
plt.show()
我收到的错误:
文件“卡罗。 py“,第55行,在 out [i,j] = filt [1]; IndexError:指数512超出范围轴1的大小为512个
感谢您的任何建议
错误说明了一切。您正试图访问超出限制的索引。如果一个数组的大小为512,那么它只有索引0-511。做一些调试来弄清楚为什么你要走出界限。 –