#image #graphics #image-processing #imagemagick
#изображение #графика #обработка изображений #imagemagick ( магия изображений)
Вопрос:
В рамках проекта, над которым я работаю, мне нужно просто проанализировать изображение с помощью приложения CLI Linux и определить, является ли его темное изображение (высокая контрастность, низкая яркость).
Пока что я понял, что могу использовать ImageMagick для получения подробной информации об изображении, но не уверен, как использовать эти данные … или есть более простое решение?
Комментарии:
1. Что означает «темный»? Вам нужно это определить. Например, это может означать, что вы усредняете все пиксели и классифицируете изображение как «темное», если результат ниже заданного порога. Получив свое определение, вы можете работать с пиксельными данными и начинать придумывать некоторый код.
Ответ №1:
Вы можете масштабировать изображение до очень маленького размера — размера 1×1 пиксель и представляющего «средний цвет» вашего исходного изображения:
convert original.jpeg -resize 1x1 1pixel-original.jpeg
Затем сначала исследуйте цвет этого отдельного пикселя
convert 1pixel-original.jpeg 1pixel-jpeg.txt
затем
cat 1pixel-jpeg.txt
# ImageMagick pixel enumeration: 1,1,255,srgb
0,0: (130,113,108) #82716C srgb(130,113,108)
Вы также можете получить тот же результат за один раз:
convert original.jpeg -resize 1x1 txt:-
# ImageMagick pixel enumeration: 1,1,255,srgb
0,0: (130,113,108) #82716C srgb(130,113,108)
Таким образом, вы получаете значения для вашего «среднего пикселя» в исходном цветовом пространстве вашего входного изображения, которое вы можете оценить по его «яркости» (как бы вы это ни определяли).
Вы можете преобразовать свое изображение в оттенки серого, а затем изменить его размер. Таким образом, вы получите значение серого как показатель «яркости»:
convert original.jpeg -colorspace gray -resize 1x1 txt:-
# ImageMagick pixel enumeration: 1,1,255,gray
0,0: (117,117,117) #757575 gray(117,117,117)
Вы также можете преобразовать свое изображение в пространство HSB (оттенок, насыщенность, яркость) и проделать то же самое:
convert original.jpeg -colorspace hsb -resize 1x1 txt:-
# ImageMagick pixel enumeration: 1,1,255,hsb
0,0: ( 61, 62,134) #3D3E86 hsb(24.1138%,24.1764%,52.4941%)
Значения «яркости», которые вы видите здесь (либо 134
, #86
либо 52.4941%
), вероятно, являются тем, что вы хотите знать.
Комментарии:
1. Работает ли это с воспринимаемой яркостью? Мне нужно объединить изображение в экранном режиме с несколькими изображениями, но некоторые из них должны быть темнее, чтобы результат выглядел нормально. Я подумал взять яркость известных мне «хороших изображений», а затем сделать темнее те, которые имеют меньшую яркость. Но я получаю аналогичные результаты с хорошими и плохими изображениями, любая помощь?
2. Это отличная идея; Я рассматривал сценарий автоматической смены обоев, который учитывал бы время суток; темные обои для ночного времени и яркие для дня. @y2josei вы можете сделать его более умным, применив какой-либо статистический анализ распределения к миниатюре большего размера, а не к 1×1; тем не менее, больше для написания сценария.