我拍了一张照片并通过神经艺术(deepart.io)应用了30种不同的艺术家模式。此步骤生成了30张不同的照片。我把每张照片水平切成30块。现在我想根据增加的亮度/亮度选择每个切片。我该怎么做python或imagemagick?
答案 0 :(得分:1)
使用ImageMagick,我可以创建一个1024x1024的黑白渐变,并将其切成30个水平切片,如下所示:
convert -size 1024x1024 gradient:black-white -crop x30@ slice-%02d.png
现在,我可以将每个切片转换为HSL颜色空间并拆分通道,丢弃Hue和饱和度,只留下亮度,并在终端提示下获得每个切片亮度的平均值,如下所示:
for f in slice*; do
convert $f -colorspace hsl -separate -delete 0,1 -resize 1x1 -format "%[mean] %f\n" info:
done | sort -n
1057 slice-00.png
3235 slice-01.png
5413 slice-02.png
7623 slice-03.png
9833 slice-04.png
12012 slice-05.png
14190 slice-06.png
16368 slice-07.png
18546 slice-08.png
20724 slice-09.png
22902 slice-10.png
25112 slice-11.png
27322 slice-12.png
29500 slice-13.png
31678 slice-14.png
33857 slice-15.png
36035 slice-16.png
38213 slice-17.png
40423 slice-18.png
42633 slice-19.png
44811 slice-20.png
46989 slice-21.png
49167 slice-22.png
51345 slice-23.png
53523 slice-24.png
55702 slice-25.png
57912 slice-26.png
60122 slice-27.png
62300 slice-28.png
64478 slice-29.png
这些值在范围[0-65535]上缩放,因为我使用的是16位ImageMagick版本 - 即运行identify -version
时的Q16。
答案 1 :(得分:0)
以下代码可以运作。它将每个PNG图像转换为RGB,然后转换为LAB颜色模式。然后计算图片的平均亮度。
from PIL import Image, ImageCms
import glob
for fn in glob.glob("*.png"):
im = Image.open(fn).convert("RGB")
psRGB = ImageCms.createProfile("sRGB")
pLab = ImageCms.createProfile("LAB")
t = ImageCms.buildTransform(psRGB, pLab, "RGB", "LAB")
imi = ImageCms.applyTransform(im, t)
total_lightness = 0
w, h = im.size
for y in xrange(h):
for x in xrange(w):
l, a, b = imi.getpixel((x, y))
total_lightness += l
avg_lightness = total_lightness / (w * h)
print "Average lightness of %s is %d" % (fn, avg_lightness)