2016-05-31 64 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.這就是我的想法。