使用Python查找平均颜色

时间:2015-04-19 05:23:05

标签: python colors simplecv

有人可以解释一下下面代码的主要功能是如何工作的吗? 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 个答案:

答案 0 :(得分:1)

sys.argv[1]是运行它时提供给程序的参数,在这种情况下是image filename

所以你运行程序为python myprogram.py path/to/image/filename.jpg。因此argv[1]将为path/to/image/filename.jpg

答案 1 :(得分:0)

sys.argv是您从命令行运行脚本时传递给脚本的命令行参数列表。此列表中的第一个元素始终是python脚本本身的路径。所以,sys.argv[0]是你的python脚本的路径。在您的情况下,第二个参数是颜色/输入文件的路径。

如果未提供第二个参数,len列表的argv将仅为1,并且函数average_image_color将不会被调用。如果提供了第二个arg,它将调用该函数,并将此arg作为参数传递。该命令如下所示:

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))