根据亮度/亮度对图像文件进行排序

时间:2016-01-25 06:11:54

标签: python imagemagick python-imaging-library

我拍了一张照片并通过神经艺术(deepart.io)应用了30种不同的艺术家模式。此步骤生成了30张不同的照片。我把每张照片水平切成30块。现在我想根据增加的亮度/亮度选择每个切片。我该怎么做python或imagemagick?

2 个答案:

答案 0 :(得分:1)

使用ImageMagick,我可以创建一个1024x1024的黑白渐变,并将其切成30个水平切片,如下所示:

convert -size 1024x1024 gradient:black-white -crop x30@ slice-%02d.png

enter image description here

现在,我可以将每个切片转换为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)