2016-05-31 22 views
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个

感谢您的任何建议

+0

错误说明了一切。您正试图访问超出限制的索引。如果一个数组的大小为512,那么它只有索引0-511。做一些调试来弄清楚为什么你要走出界限。 –

回答

0

对不起我不能评论。新的堆栈溢出,并没有50名声誉。 您的i或j的值将是512.大小为512的数组的索引为0到511.这就是我的想法。