Нахождение среднего цвета с помощью Python
Может кто-нибудь объяснить мне, как работает основная функция для кода ниже? что это значит под average_image_color()
функция принимает аргумент sys.argv[1]
в main
функционировать?
from PIL import Image
def average_image_color(filename):
i = Image.open(filename)
h = i.histogram()
# split into red, green, blue
r = h[0:256]
g = h[256:256*2]
b = h[256*2: 256*3]
# perform the weighted average of each channel:
# the *index* is the channel value, and the *value* is its weight
return (
sum( i*w for i, w in enumerate(r) ) / sum(r),
sum( i*w for i, w in enumerate(g) ) / sum(g),
sum( i*w for i, w in enumerate(b) ) / sum(b)
)
if __name__ == '__main__':
import sys
if len(sys.argv) > 1:
print average_image_color(sys.argv[1])
else:
print 'usage: average_image_color.py FILENAME'
print 'prints the average color of the image as (R,G,B) where R,G,B are between 0 and 255.'
Я нашел код выше с GitHubs Большое спасибо!
2 ответа
sys.argv[1]
аргумент, предоставленный программе во время ее запуска, который является image filename
в этом случае.
Итак, вы запускаете программу как, python myprogram.py path/to/image/filename.jpg
, Так argv[1]
будет path/to/image/filename.jpg
sys.argv
список аргументов командной строки, которые вы передаете в свой скрипт, когда запускаете их из командной строки Первым элементом в этом списке всегда является путь самого скрипта Python. Так, sys.argv[0]
это путь к вашему скрипту Python. В вашем случае вторым аргументом является путь к цвету / входному файлу.
Если второй аргумент не указан, len
из argv
список будет только 1, а функция average_image_color
не будет звонить. Если этот второй аргумент указан, он вызовет функцию, передав этот аргумент в качестве параметра. Команда будет выглядеть так:
python script.py /path/to/the/image/input/file
Если вы не хотите использовать командную строку, файлы изображений можно прочитать из каталога:
import os
if __name__ == '__main__':
dirpath, dirnames, filenames = next(os.walk('/path/to/images/directory'))
for filename in filenames:
print average_image_color(os.path.join(dirpath, filename))