Как я могу разделить файл изображения по цветовой области на несколько файлов изображений?

Возьмите это изображение круга и квадрата на прозрачном фоне (png).

введите описание изображения здесь

Я хочу разбить это изображение по регионам. Области обозначены соединенным цветом. У меня круглая область. И квадратная область.

Результатом будет один файл изображения с кружком на нем.

введите описание изображения здесь

и второй файл изображения с квадратом на нем.

введите описание изображения здесь

Может ли ImageMagick это сделать? Может ли это сделать другой инструмент? Как я могу это сделать?


person aganm    schedule 30.03.2021    source источник
comment
См. Обработку подключенных компонентов   -  person fmw42    schedule 30.03.2021
comment
Или заполните область, которую вы не хотите, так, чтобы она слилась с фоном.   -  person Mark Setchell    schedule 30.03.2021


Ответы (1)


Вот как это сделать в ImageMagick. Хочу отметить, что ваше размещенное изображение имеет белый фон, а не прозрачный. Однако я изменил белый цвет на прозрачный. Сначала я получаю ограничивающие рамки объектов, используя связанные компоненты. Затем я перебираю каждую ограничивающую рамку, обрезаю ее и возвращаю в прозрачное изображение, используя информацию виртуального холста, хранящуюся в обрезанном изображении.

Вход:

введите описание изображения здесь

bboxArr=(`convert circle_rectangle_transp.png -type bilevel \
-define connected-components:verbose=true \
-define connected-components:exclude-header=true \
-define connected-components:mean-color=true \
-connected-components 8 null: | grep "gray(0)" | awk '{print $2}'`)

echo "${bboxArr[*]}"

i=0
for bbox in ${bboxArr[*]}; do
echo $bbox
convert circle_rectangle_transp.png -crop "$bbox" -background none -flatten  circle_rectangle_transp_$i.png
i=$((i+1))
done

введите описание изображения здесь

введите описание изображения здесь

person fmw42    schedule 30.03.2021