2016-10-14 3 views
0

Я пытаюсь получить информацию о цветах многих изображений и экспортировать их (желательно в один файл txt) с помощью Imagemagick. Я специально ищу количество пикселей каждого цвета. Для одного изображения я использую:Как я могу использовать команду mogrify в Imagemagick для получения информации о цветах многих изображений?

convert image.png -format %c histogram:info:result.txt 

Что дает мне то, в чем я нуждаюсь. Текстовый файл, который содержит:

38775: ( 0,255, 0) #00FF00 lime 
    523: (255, 0, 0) #FF0000 red 
11756: (255,255, 0) #FFFF00 yellow 
236946: (255,255,255) #FFFFFF white 

Я пытался сделать это для всех изображений с помощью mogrify, но без удачи. Как я уже говорил, я бы идеально собирал всю информацию в одном файле, но отдельные файлы, содержащие информацию, тоже были бы замечательными.

ответ

1

Я понятия не имею, что вы пытаетесь сделать, или в чем смысл, и я не понимаю, почему вы так заинтересованы в использовании mogrify, чтобы достичь этого ... но я могу создать несколько изображений и рассказать вам, что в них:

convert -size 10x10 xc:blue blue.png 
convert -size 10x10 xc:red red.png 
convert -size 50x50 gradient:yellow-cyan -colors 8 mad.png 

enter image description here enter image description here enter image description here

Итак, здесь мы:

convert red.png blue.png mad.png -depth 8 -format "%c" histogram:info: 
     100: (255, 0, 0) #FF0000 red 
     100: ( 0, 0,255) #0000FF blue 
     606: (33,255,222) #21FFDE srgb(33,255,222) 
     613: (94,255,161) #5EFFA1 srgb(94,255,161) 
     1: (128,255,128) #80FF80 srgb(128,255,128) 
     641: (161,255, 94) #A1FF5E srgb(161,255,94) 
     639: (224,255, 31) #E0FF1F srgb(224,255,31) 

Или, с именами файлов тоже:

convert red.png blue.png mad.png -format "%f:%c" histogram:info: 

red.png:  100: (255, 0, 0) #FF0000 red 
blue.png:  100: ( 0, 0,255) #0000FF blue 
mad.png:  606: (8520,65535,57016) #2148FFFFDEB8 srgb(13%,100%,87%) 
     613: (24248,65535,41287) #5EB8FFFFA147 srgb(37%,100%,63%) 
     1: (32768,65535,32768) #8000FFFF8000 srgb(50%,100%,50%) 
     641: (41287,65535,24248) #A147FFFF5EB8 srgb(63%,100%,37%) 
     639: (57671,65535, 7864) #E147FFFF1EB8 srgb(88%,100%,12%) 

Или с именами файлов в начале каждого раздела:

convert red.png blue.png mad.png -format "%f\n%c" histogram:info: 

red.png 
     1: (255, 0, 0) #FF0000 red 
blue.png 
     1: (255, 0, 0) #FF0000 red 
mad.png 
     606: (8520,65535,57016) #2148FFFFDEB8 srgb(13%,100%,87%) 
     613: (24248,65535,41287) #5EB8FFFFA147 srgb(37%,100%,63%) 
     1: (32768,65535,32768) #8000FFFF8000 srgb(50%,100%,50%) 
     641: (41287,65535,24248) #A147FFFF5EB8 srgb(63%,100%,37%) 
     639: (57671,65535, 7864) #E147FFFF1EB8 srgb(88%,100%,12%) 

Или, может быть, вы имеете в виду это:

for f in *.png; do echo $f; convert "$f" -format %c histogram:info: ;done > result.txt 

Result.txt

blue.png 
     1: (255, 0, 0) #FF0000 red 
mad.png 
     606: (8520,65535,57016) #2148FFFFDEB8 srgb(13%,100%,87%) 
     613: (24248,65535,41287) #5EB8FFFFA147 srgb(37%,100%,63%) 
     1: (32768,65535,32768) #8000FFFF8000 srgb(50%,100%,50%) 
     641: (41287,65535,24248) #A147FFFF5EB8 srgb(63%,100%,37%) 
     639: (57671,65535, 7864) #E147FFFF1EB8 srgb(88%,100%,12%) 
red.png 
     1: (255, 0, 0) #FF0000 red 

Что вы планируете делать с результатами - я подозреваю, что есть простой способ его достижения ...

+0

'for f in * .png; do echo $ f; конвертировать «$ f» -формат% c histogram: info:; done> result.txt' на самом деле я имел в виду. Я хотел использовать 'mogrify', потому что я мог бы сделать это с помощью' convert' и думал, что это будет самый простой способ сделать это для многих изображений. Я хотел бы использовать результаты для анализа ряда карт, которые я очистил. На этих картах области имеют определенный цвет в зависимости от их значения. Но у меня нет необработанных данных, чтобы увидеть, насколько большие области (и размер изменяется непрерывно). Я хочу использовать эти результаты, чтобы отслеживать, сколько пикселей (и, следовательно, сколько площади) есть для каждого цвета. –

+0

О, классный проект. Вы можете подумать о выборе палитры из 30 цветов, а затем переопределить цвета в общую палитру, чтобы все * «почти розовые» * выходили как один стандартный розовый и все «почти блюз» * в качестве стандартного синего ... –

+0

Спасибо! Да, это именно то, что я сделал. Первоначальная карта должна иметь всего четыре цвета, но все края имеют затенение, а иногда было много «смешанных» пикселей, когда области с разными цветами разделяли границу. Мне удалось определить все эти и изменить их до намеченного цвета. –

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