Я пытаюсь изменить значение пикселя на изображении до ближайшего значения в моем списке, и я не могу понять, почему я не могу изменить значение пикселя.
Я пытался преобразовать изображение в RGB или RGBA, и по некоторым причинам иногда требуется 3 аргумента, иногда 4.
im = Image.open('rick.png') # Can be many different formats.
rgb_im = im.convert('RGBA')
pix = im.load()
height, width = im.size
image = ImageGrab.grab()
COLORS = (
(0, 0, 0),
(127, 127, 127),
(136, 0, 21),
(237, 28, 36),
(255, 127, 39),
)
def closest_color(r, g, b, COLORS):
min_diff = 9999
answer = None
for color in COLORS:
cr, cg, cb = color
color_diff = abs(r - cr) + abs(g - cg) + abs(b - cb)
if color_diff < min_diff:
answer = color
min_diff = color_diff
return answer
def read_color(height,width, COLORS, pix):
for x in range(height):
for y in range(width):
r,g,b,a = rgb_im.getpixel((x,y))
color = closest_color(r, g, b, COLORS) # color is returned as tuple
pix[x,y] = color # Changing color value? -Here i get the error-
read_color(height,width, COLORS, pix)
im.save('try.png')
Я получаю эту ошибку, даже если closest_value возвращает один аргумент, и я не знаю почему, спасибо за вашу помощь!
ЦВЕТА - это список цветов, я протестировал функцию closest_color (), и она хорошо работает
Сообщение об ошибке:
'Exception has occurred: TypeError
function takes exactly 1 argument (3 given)
File "C:\Users\user\Desktop\תוכנות שעשיתי\program.py", line 133, in
read_color
pix[x,y] = color
File "C:\Users\user\Desktop\תוכנות שעשיתי\program.py", line 137, in
<module>
read_color(height,width, COLORS, pix)'
ИЗМЕНИТЬ!
Возможно, код работает для большинства изображений, но не для всех, например, это изображение не работает, и я получаю эту ошибку