Я не знаю, что вы пытаетесь сделать, но я думаю, что вы не поняли, что Python объекты должны быть скопированы , чтобы быть уникальными объектами с собственной выделенной памятью.
Сравните это, когда каждое изображение в списке делится памятью с другими элементами:
image=Image.open("image.png").convert('RGB')
images=[]
for i in range(1, 6):
images.append(image)
Если вы сейчас посмотрите на список - в частности, на адресах справа вы можете видеть, что они все это одно и то же:
print(images)
[<PIL.Image.Image image mode=RGB size=1000x300 at 0x1084C3C10>,
<PIL.Image.Image image mode=RGB size=1000x300 at 0x1084C3C10>,
<PIL.Image.Image image mode=RGB size=1000x300 at 0x1084C3C10>,
<PIL.Image.Image image mode=RGB size=1000x300 at 0x1084C3C10>,
<PIL.Image.Image image mode=RGB size=1000x300 at 0x1084C3C10>]
И если мы проверим, разделяют ли они память:
print(images[0] is images[4])
True
Теперь посмотрите на это, когда я копирую каждое изображение, чтобы оно было уникальной копией с свои собственные данные:
Uimages=[]
for i in range(1, 6):
Uimages.append(image.copy())
Теперь посмотрите на список и увидите, что адреса разные:
print(Images)
[<PIL.Image.Image image mode=RGB size=1000x300 at 0x108797790>,
<PIL.Image.Image image mode=RGB size=1000x300 at 0x108797F50>,
<PIL.Image.Image image mode=RGB size=1000x300 at 0x1087973D0>,
<PIL.Image.Image image mode=RGB size=1000x300 at 0x108797510>,
<PIL.Image.Image image mode=RGB size=1000x300 at 0x1084DB450>]
И проверьте, не являются ли они одним и тем же объектом:
print(Uimages[0] is Uimages[4])
False
В общем, если вы начинаете обрабатывать изображения как списки пикселей, вы, вероятно, уже ошиблись. Это неэффективно и медленно. Попробуйте использовать Numpy или OpenCV и использовать векторизованный код.