有人可以解释一下下面代码的主要功能是如何工作的吗?
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找到了上面的代码。非常感谢你!
答案 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))