2016-05-31 6 views
0

könnten Sie in diesem Code suchen Sie, und sagen Sie mir, was falsch ist:Python> OpenCV> numpy> Bildverarbeitung

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() 

Ich habe diesen Fehler erhalten:

File „karo. py ", Zeile 55, in out [i, j] = filt [1]; Indexerror: Index 512 sind Grenzen aus der Achse 1 mit einer Größe von 512

Dank für alle Ratschläge

+0

Der Fehler sagt alles. Sie versuchen, auf einen Index zuzugreifen, der außerhalb der Grenzen liegt. Wenn ein Array eine Größe von 512 hat, hat es nur die Indizes 0-511. Führen Sie ein Debugging durch, um herauszufinden, warum Sie außerhalb der Grenzen sind. –

Antwort

0

Leider habe ich nicht kommentieren kann. Neu im Stack Überlauf und 50 Reputationen noch nicht. Entweder geht Ihr i oder j auf einen Wert von 512. Array mit der Größe 512 hat die Indizes 0 bis 511. Das ist, was ich denke.