Я получаю следующую ошибку (важна последняя строка) для приведенного ниже кода:
Предупреждение (из модуля предупреждений): Файл "C: / [расположение_файлов] / ittivation 4.py",строка 12
avgNug = уменьшите (лямбда x, y: x + y, eachPix [: 3]) / len (eachPix [: 3])
RuntimeWarning: переполнение, обнаруженное в ubyte_scalars
Трассировка (последний вызов был последним):
Файл "C: / [расположение_файла] / ittivation 4.py", строка 45, в
порог (iar4)
Файл "C: / [расположение_файла] / ittivation 4.py", строка 13, в пороге
balanceAr.append (avgNum)
NameError: глобальное имя 'balanceAr' не являетсяопределены
Я пытался написать «глобальный» перед ним, определив его вне определения, с несколькими синтаксисами для «глобального» определения.
Код взят извидео sentdex https://www.youtube.com/watch?v=nych18rsXKU, где работает этот код.
Я использую ту же версию Python, что и он, и предполагаю, что те же библиотеки, так как это четвертый программа из плейлиста, а предыдущие 3 работали нормально.
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
import time
def threshold(imageArray):
balaceAr = []
newAr = imageArray
for eachRow in imageArray:
for eachPix in eachRow:
avgNug = reduce(lambda x, y: x + y, eachPix[:3])/len(eachPix[:3])
balanceAr.append(avgNum)
balance = reduce(lambda x, y: x + y, balanceAr)/len(balanceAr)
for eachRow in newAr:
for eachPix in eachRow:
if reduce(lambda x, y: x + y, eachPix[:3])/len(eachPix[:3]) > balance:
#eachPix 0,1,2,3 = 255
else:
#eachPix 0,1,2 = 0
eachPix[3] = 255
return newAr
'''in the original code this part is not commented, and there's also a i, i2 and i3
i4 = Image.open('images/sentdex.png')
iar4 = np.array(i4)'''
threshold(iar4)
'''same explanation as previous comment, only coordinates in 2nd () are 0,0;4,0;0,3
fig = plt.figure()
ax4 = plt.subplot2grid((8,6), (4,3), rowspan=4, colspan=3)
ax4.imshow(iar4)
'''
plt.show()
#P.S. I had to write " " on all lines that didn't have it for stackoverflow
# to interpret it as code, even if it was in the "code" section