2013-09-03 3 views
0

как заголовок говорит, я пытаюсь определить массив матриц (ведьма представляет изображения) в Python. Но когда я пытаюсь прочитать матрицу, я получил это сообщение: «У экземпляра ImageData нет атрибута» getitem «» « В настоящее время я начинаю изучать Python, поэтому я знаю, что это должно быть просто для многих . людей, но я не знаю, что это неправильно Это мой код:Массив матриц в Python

ImageData.py
import random 
import math 

class ImageData: 

def __init__ (self, width, height): 
    self.width = width 
    self.height = height 
    self.data = [] 
    for i in range(width): 
     self.data.append([0] * height) 

def set_data (self, x, y, value): 
    self.data[x][y] = value 

def generate_voronoi_diagram (self, seeds): 
    nx = [] 
    ny = [] 
    nr = [] 
    ng = [] 
    nb = [] 
    for i in range(seeds): 
     # Generate a cell position 
     pos_x = random.randrange(self.width) 
     pos_y = random.randrange(self.height) 
     nx.append(pos_x) 
     ny.append(pos_y) 

     # Save the rgb data 
     nr.append(random.randrange(256)) 
     ng.append(random.randrange(256)) 
     nb.append(random.randrange(256)) 

    for x in range(self.width): 
     for y in range(self.height): 
      # Return the Euclidean norm 
      d_min = math.hypot(self.width-1, self.height-1) 
      j = -1 
      for i in range(seeds): 
       # The distance from a cell to x, y point being considered 
       d = math.hypot(nx[i]-x, ny[i]-y) 
       if d < d_min: 
        d_min = d 
        j = i 
       self.data[x][y] = [nr[j], ng[j], nb[j]] 

UncertaintyVisualisaton.py
from PIL import Image 
import numpy 
import ImageData 

def generate_uncertainty_visualisation (images, width, height): 
    image = Image.new("RGB", (width, height)) 
    putpixel = image.putpixel 
    r = g = b = [] 
    for i in range(width): 
     r.append([0] * height) 
     g.append([0] * height) 
     b.append([0] * height) 
    for i in range(len(images)): 
     image = images[i] 
     for x in range(width): 
      for y in range(height): 
       #Error here 
       rgb = image[x][y] 
       r[x][y] += rgb[0] 
       g[x][y] += rgb[1] 
       b[x][y] += rgb[2] 
    for x in range(width): 
     for y in range(height): 
      r[x][y] /= len(images) 
      g[x][y] /= len(images) 
      b[x][y] /= len(images) 
      putpixel((x, y), (r[x][y], g[x][y], b[x][y])) 
    image.save("output.png", "PNG") 


if __name__ == "__main__": 
    width = 10; 
    height = 10; 
    entries = [] 
    seeds = numpy.random.poisson(20) 
    images = 1 
    for n in range(images): 
     entry = ImageData.ImageData(width, height) 
     entry.generate_voronoi_diagram(seeds) 
     entries.append(entry) 
    generate_uncertainty_visualisation(entries, width, height) 

Любая помощь будет очень ценится T. мотки.

+0

Просьба вставить полную трассировку стека. Он точно описывает, в чем проблема и где. Также вы можете сделать это в части кода и времени работы с NumPy ... – YXD

+0

Можете ли вы исправить отступы. – RickyA

ответ

0

В UncertaintyVisualisaton.py первой установке:

image = Image.new("RGB", (width, height)) 

А затем цикл над images переназначить:

image = images[i] 

Это, вероятно, не хотят, чтобы вы хотите.

Кроме того, ваша ошибка:

#Error here 
rgb = image[x][y] 

происходит потому, что ImageData не список. Данные включают в себя:

#no more Error here 
rgb = image.data[x][y] 
+0

Спасибо. Глупые ошибки. Большое спасибо. – pceccon

Смежные вопросы