У меня есть этот код, который анализирует для одного изображения все значения пикселей и вычисляет, если каждый цвет близок к черному или белым с формулой расстояния Евклида:PIL/Pillow: один цикл для нескольких списков im.getdata()
from PIL import Image
from math import sqrt
im=Image.open("7.jpg")
size=128,128
im.thumbnail(size)
colors=im.getdata()
darklist=[]
lightlist=[]
dark=0
light=0
for item in colors:
if sqrt((item[0]-255)**2 + (item[1]-255)**2 + (item[2]-255)**2) < sqrt((item[0]-0)**2 + (item[1]-0)**2 + (item[2]-0)**2):
lightlist.append(item)
light+=1
else:
darklist.append(item)
dark+=1
print ("Total light pixels=",light)
print ("Total dark pixels=",dark)
if len(darklist) > len(lightlist):
print ("This image is DARK")
else:
print ("This image is LIGHT")
Сейчас я пытаюсь расширить этот код таким образом, он автоматически принимает все изображения в папке, преобразующие их эскизы и анализирует их по одному с этой же формулой.
EDIT после различных попыток с отступом, я писал:
import glob, os
from PIL import Image
from math import sqrt
darklist=[]
lightlist=[]
dark=0
light=0
happylist=[]
sadlist=[]
size=128,128
for infile in glob.glob("*.jpg"):
im=Image.open(infile)
im.thumbnail(size)
file, ext = os.path.splitext(infile)
im = Image.open(infile)
im.thumbnail(size, Image.ANTIALIAS)
im.save(file + ".thumbnail", "JPEG")
for infile in glob.glob("*.thumbnail"):
im=Image.open(infile)
colors=im.getdata()
for item in colors:
if sqrt((item[0]-255)**2 + (item[1]-255)**2 + (item[2]-255)**2) < sqrt((item[0]-0)**2 + (item[1]-0)**2 + (item[2]-0)**2):
lightlist.append(item)
light+=1
else:
darklist.append(item)
dark+=1
print ("Total light pixels=",light)
print ("Total dark pixels=",dark)
if len(darklist) > len(lightlist):
print ("This image is DARK")
else:
print ("This image is LIGHT")
С помощью этого кода теперь у меня есть 7 различных выходов (по одному для каждого изображения в моей папке), но я заметил, что эти цифры не» t складывается при подсчете количества пикселей каждого изображения. Может быть, что-то не так с darklist, lightlist и их счетчики.
Моя общая проблема: как применить формулу евклидовой дистанции к каждому изображению в папке? Теперь у меня есть 7, но я мог бы иметь гораздо больше ..
Ваша проблема непонятна: вы предполагаете, что она работает одновременно со всеми значениями одновременно или это то, что вы хотите *? Вы просто хотите подтвердить свою догадку? – Evert
Считаете ли вы использование numpy? – Evert
Когда я называю im.getdata() и задать LEN (im.getdata()) мой вывод: '16384 16384 (x7)' , что 7 списки 16384 пунктов каждый (количество пикселей в каждом image) Я хотел бы теперь применить мою формулу к каждому списку последовательно таким образом, чтобы у меня было 7 выходов: 'Всего пикселей: = Всего темных пикселей = * Это изображение ТЕМНОЕ (или СВЕТ)' Надежда Теперь я был более ясен :) – Mikhaylova