2016-05-31 7 views
0

あなたは、このコードを見てください、そしてそれと間違っているものを私に言うことができる:パイソン> 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() 

を私はそのエラーを受け取りました:

ファイル「KAROを。 py "、ライン55、 out [i、j] = filt [1]; はIndexError:インデックス512は、大きさと軸1の境界の外に

+0

エラーはそれをすべて言います。範囲外のインデックスにアクセスしようとしています。配列のサイズが512の場合、インデックスは0から511までしかありません。なぜあなたが限界を超えているのか理解するためにデバッグをしてください。 –

答えて

0

は申し訳ありませんが、私はコメントすることはできません任意のアドバイスのための512の

のおかげです。スタックオーバーフローの新機能で、まだ50の評判はありません。 iまたはjの値が512になります。サイズが512の配列は0から511までのインデックスを持ちます。それは私の考えです。

関連する問題