Нахождение среднего цвета с помощью 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))
Другие вопросы по тегам