2017-03-17 23 views
0

新しく編集した画像に境界線を置こうとすると、このエラーが発生します。エラーはこのコード行から発生します。タイプエラー 'int'オブジェクトに属性 '__getitem__'がありません

img_with_border = ImageOps.expand(imgred,border=25,fill='red') 

誰でも修正がありますか? (私のpythonでのnoobだ。)

def family(): 
q1=raw_input('What is the directory of your image? : ') 
q2=raw_input('Which of these best fits you?: Christian, Patriot, or Satanist? : ') 
q3=raw_input('What is the width of your frame? : ') 
filename = (q1) 
img = plt.imread(filename) 
# Read the image data into an array 
imgred = plt.imread(filename) 
img = plt.imread(filename) 
imgpat = plt.imread(filename) 
imgblue = plt.imread(filename) 
imggreen = plt.imread(filename) 
imggrey = plt.imread(filename) 
height = len(imgred) 
width = len(imgred[0]) 
if q2 == 'Satanist': 
    for c1 in range(height): 
     for c2 in range(width): 
      imgred[c1][c2][1]=0 
      imgred[c1][c2][2]=0 
      r=abs(imgred[c1][c2][0]-255) 
      g=abs(imggreen[c1][c2][1]-255) 
      b=abs(imgblue[c1][c2][2]-255) 
      imgred[c1][c2]=[r,g,b] 
      r=abs(imgred[c1][c2][0]-255) 
      g=abs(imggreen[c1][c2][1]-255) 
      b=abs(imgblue[c1][c2][2]-255) 
      imgred[c1][c2]=[r,g,b] 




def give_image(): 
img_with_border = ImageOps.expand(imgred,border=25,fill='red')    
# Create figure with 3 subplots 
fig, ax = plt.subplots(1, 3) 
# Show the image data in a subplot 
ax[0].imshow(img, interpolation='none') 
ax[1].imshow(imgred, interpolation='none') 
ax[2].imshow(img_with_border, interpolation='none') 

MCVE:私はすでに編集した画像に境界線を追加しようとすると 、エラーがアップします。 例:

image_file = ('woman.jpg') 
filename = 'C:/Users/Dylan/woman.jpg' 
imgred = plt.imread(filename) 
height = len(imgred) 
width = len(imgred[0]) 

for c1 in range(height): 
    for c2 in range(width): 
     imgred[c1][c2][1]=0 
     imgred[c1][c2][2]=0 

def give_image(): 
img_with_border = ImageOps.expand(imgred,border=25,fill='red')    
# Create figure with 3 subplots 
fig, ax = plt.subplots(1, 1) 
# Show the image data in a subplot 
ax.imshow(imgred, interpolation='none') 

しかし、それが編集されていない画像があると私は境界線を追加しようとすると、エラーがありません。

image_file = ('woman.jpg') 
filename = 'C:/Users/Dylan/woman.jpg' 
img = plt.imread(filename) 
img = Image.open('woman.jpg') 
img_with_border = ImageOps.expand(img,border=25,fill='violet') 

def give_image(): 
    fig, ax = plt.subplots(1, 1) 
    # Show the image data in a subplot 
    ax.imshow(img_with_border, interpolation='none') 

エラーそのもの。

235  "Add border to image" 
236  left, top, right, bottom = _border(border) 
--> 237  width = left + image.size[0] + right 
238  height = top + image.size[1] + bottom 
239  out = Image.new(image.mode, (width, height), _color(fill, image.mode)) 

ありがとう。

答えて

0

エラーがImageOps.expandであるので、あなたのインタプリタでこれを実行します。

help(ImageOps.expand) 

それはどのように機能を使用する方法を教えてくれますし、それはあなたがそれについてのあなたの誤解を理解すべきです。

つまり、エラー、特にleft, top, right, bottom = _border(border)で判断すると、border引数から4つの値を取得しようとしているようです。これはまた、国境からアイテムを取得することができない、つまりメソッド__getitem__を実行していない理由です。

基本的には、border引数を4つのもの(左、上、右、下の境界線のサイズ)のリストに変更する必要があります。

+0

ありがとうございます。私は今それを試みます。 – DZapza

+0

私は戻ってきました...境界の議論を4つのリストに変更するにはどうすればいいですか? – DZapza

+0

@DZapzaリストを返す必要があります: 'return left、top、right、bottom' – Barmar

関連する問題