Member 12732648 Ответов: 1

Я получаю эту ошибку в своем коде может ли кто нибудь помочь


Предупреждение (из модуля предупреждения):
File "D:\Python\programs\IMG PRO\im3.py", line 8
    avgNum = reduce(lambda x, y: x + y, eachPix[:3])/3
RuntimeWarning: overflow encountered in ubyte_scalars


Предупреждение (из модуля предупреждения):
File "D:\Python\programs\IMG PRO\im3.py", line 16
    if reduce(lambda x, y: x + y, eachPix[:3]) / len(eachPix[:3]) > balance:
RuntimeWarning: overflow encountered in ubyte_scalars


Что я уже пробовал:

from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
def bal(imageArray):
    balanceAr = []
    for eachRow in imageArray:
        for eachPix in eachRow:
            avgNum = reduce(lambda x, y: x + y, eachPix[:3])/3
            balanceAr.append(avgNum)
    balance = sum(balanceAr[0:len(balanceAr)]) / len(balanceAr)
    return balance
def threshold(imageArray,balance):
    newAr = imageArray
    for eachRow in newAr:
        for eachPix in eachRow:
            if (reduce(lambda x, y: x + y, eachPix[:3]) / 3) > balance:
                eachPix[0] = 255
                eachPix[1] = 255
                eachPix[2] = 255
                eachPix[3] = 255
            else:
                eachPix[0] = 0
                eachPix[1] = 0
                eachPix[2] = 0
                eachPix[3] = 255
    return newAr


i=0
newa=list()
while i<3:
    i=i+1
    na=raw_input("enter image name")
    i=Image.open(na)
    iar = np.array(i)
    b=bal(iar)
    iar = threshold(iar,b)
    newa.append(iar)

Suvendu Shekhar Giri

есть успехи с отладкой?

Richard MacCutchan

Вам нужно посмотреть на значения всех переменных в выражении, которое дает ошибку.

1 Ответов

Рейтинг:
4

Jochen Arndt

Это не ошибки, а предупреждения.

Они говорят вам, что результат операции x + y может переполниться. Ваши параметры имеют тип uint8 (диапазон от 0 до 255). При добавлении двух таких значений результат может быть больше 255, что не может быть сохранено как uint8 Затем результат усекается до 8 бит.

Можно ли это принять или нет, зависит от того.

Поиск в Google ошибки показывает, что вы не первый для этого кода.:
python-runtime Warning overflow встречается в ubyte_scalars - Stack Overflow[^]