2016-01-25 2 views
3

Я взял одну из своих фотографий и применил 30 различных рисунков художников через Neural Art (deepart.io). На этом этапе было создано 30 разных фотографий. Я нарезал каждую фотографию на 30 штук по горизонтали. Теперь я хочу выбрать каждый срез на основе увеличения яркости/яркости. Как я могу сделать это python или imagemagick?Сортировка файлов изображений на основе яркости/яркости

+0

Пожалуйста, введите код, чтобы показать, что вы пробовали. –

+0

У меня есть код для разбиения изображения на n горизонтальных фигур, а также код для объединения путем случайного выбора фрагмента изображения из позиции i. Но выход неравномерен. Я не пробовал что-либо по отношению к яркости, потому что я новичок в обработке изображений. – hashg

ответ

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

Используя ImageMagick, я могу создать 1024х1024 черно-белый градиент и нарезать его на 30 горизонтальных слоев, как это:

convert -size 1024x1024 gradient:black-white -crop [email protected] slice-%02d.png 

enter image description here

Теперь я могу преобразовать каждый ломтик HSL и отделять каналы, отбрасывать оттенок и насыщенность, оставляя только Lightness и получая среднее значение Lightness в каждом терминале в подсказке терминала следующим образом:

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, то есть Q16, когда я запускаю identify -version.

Смежные вопросы