Я искал сайт, это правда, что есть другие темы с тем же именем и те же проблемы, но я попытался прочитать и применить изменения к моей программе без каких-либо результатов, поэтому я решил открыть новый.Python - объект 'int' не имеет атрибута '__getitem__'
мне нужно создать класс Pixels (который я создал без проблем), и класс PImage
, который вместо того, чтобы я нашел проблему:
(носить только самые важные методы)
класс Pixel:
class Pixel(object):
def __init__(self, r, g, b, op): // op = opacity
self.r, self.g, self.b, self.op = r, g, b, op
def __sub__(self, other):
return self.r-other.r,self.g-other.g,self.b-other.b
класс PImage
class PImage(object):
def __init__(self, fname=None, size=None):
if(fname!=None):
img_app = image.load(fname)
self.immagine = img_app
w, h = len(img_app[0]), len(img_app)
for j in range(h):
for i in range(w):
self.immagine[j][i] = [Pixel(img_app[j][i][0], img_app[j][i][1], img_app[j][i][2], 255)]
elif(size!=None):
self.immagine = image.create(size[0], size[1], (0,0,0, 255))
def size(self):
return len(self.immagine[0]), len(self.immagine)
def get_pixel(self, x, y):
if image.inside(x, y, self.immagine):
return self.immagine[y][x]
else:
return None
def opacity(self, x, y, t=150):
w, h = len(self.immagine[0]), len(self.immagine)
for j in range(h):
for i in range(w):
d = abs(self.get_pixel(x, x) - x) + abs(self.get_pixel(y, y) - y) + abs(self.immagine[j][i][0] - self.immagine[y][x][0]) + abs(self.immagine[j][i][1] - self.immagine[y][x][1]) + abs(self.immagine[j][i][2] - self.immagine[y][x][2])
self.immagine[j][i][3] = (d*self.immagine[j][i][3])/(d + t)
переменная d
, у меня есть применять формулу, составленную следующим образом (здесь я получаю из ошибки):
d = abs (xp - x) + abs (yp - y) + abs (rp - r) + abs (gp - g) + abs (bp - b)
где (xp, yp), (rp, gp, bp) op
, соответственно, положение, цвет и непрозрачность p
и (r, g, b)
цвет пикселя в положении (x, y)
.
Traceback:
Я попытался вручную, и когда программа вызывает words.opacity(100, 160)
, программа возвращает ошибку
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-16-3e2e34f8ee0f> in <module>()
----> 1 words.opacity(100, 160)
/home/user/Scrivania/python/program01.py in opacity(self, x, y, t)
155 for i in range(w):
156 #d = abs(self.immagine[j][i].x - x) + abs(self.immagine[j][i].y - y) + abs(self.immagine[j][i][0] - self.immagine[y][x][0]) + abs(self.immagine[j][i][1] - self.immagine[y][x][1]) + abs(self.immagine[j][i][2] - self.immagine[y][x][2])
--> 157 d = abs(self.get_pixel(x, x) - x) + abs(self.get_pixel(y, y) - y) + abs(self.immagine[j][i][0] - self.get_pixel[y][x][0]) + abs(self.immagine[j][i][1] - self.immagine[y][x][1]) + abs(self.immagine[j][i][2] - self.immagine[y][x][2])
158 self.immagine[j][i][3] = (d*self.immagine[j][i][3])/(d + t)
159
/home/user/Scrivania/python/program01.py in get_pixel(self, x, y)
145
146 def get_pixel(self, x, y):
--> 147 if image.inside(x, y, self.immagine):
148 return self.immagine[y][x]
149 else:
/home/user/Scrivania/python/image.pyc in inside(img, i, j)
78 '''Ritorna True se il pixel (i, j) e' dentro l'immagine img, False
79 altrimenti'''
---> 80 w, h = len(img[0]), len(img)
81 return 0 <= i < w and 0 <= j < h
82
TypeError: 'int' object has no attribute '__getitem__'
Если функция внутри пакета image.pyc является:
def inside(img, i, j):
w, h = len(img[0]), len(img)
return 0 <= i < w and 0 <= j < h
Где вы действительно напутали ошибку? –
Пожалуйста, отправьте полный ответ! Благодаря! –
, когда я запускаю «вычитание» в формуле для вычисления d – rave