1

лиса

Я хочу оставить только лису. То есть изменить белый цвет фона изображения на прозрачный с помощью imagemagick.

Сглаживание неразрешимо, край изображения - пилообразный.

Я попробовал это.

Вот код:

convert fox.jpeg -alpha set -channel RGBA \
-fill none -opaque white fox_one.jpeg 

convert fox.jpeg -matte -fill none \
-draw 'color 0,0 replace' fox_two.jpeg

Оба потерпели неудачу с этим

Я сделал это в соответствии с color_basics/# replace.

Любые более точные документы рекомендуется? И как это исправить?

1 ответ1

2

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


Хотя я даю свои предложения ниже, вероятно, есть гораздо лучшие способы сделать то, о чем я сейчас не знаю. Пожалуйста, прости любые ошибки, упущения или вещи, которые я мог упустить из виду. знак равно


Простая одноцветная прозрачность

Чтобы преобразовать один цвет (например, фон) в прозрачный, вы можете использовать:

convert fox.jpg -transparent white fox_transparent.png

Однако это приводит к тем же результатам, что и ваш плохой имидж, что нежелательно:

ех. fox_transparent

fox_transparent_nofuzz

Это потому, что области белого цвета (выше) не совсем белые (они не совсем белые, в основном из-за сглаживания, как вы заметили). Чтобы исправить это, одним из возможных вариантов является использование -fuzz для выбора пикселей, которые почти (почти) белого цвета:

convert fox.jpg -fuzz 11% -transparent white fox_transparent_fuzzed.png

Это дает лучшие результаты:

ех. fox_transparent_fuzzed

fox_transparent_fuzzed


Лучшие края (?)

Хотя простое использование -fuzz может работать достаточно хорошо, все же может возникнуть нежелательная шероховатость:

ех. fox_transparent_fuzzed - Rough Edges

fox_transparent_fuzzed_jaggies

Чтобы решить эту проблему, мы можем использовать маску , которая была размыта, чтобы помочь смягчить края изображения. Чтобы сделать это за один шаг, мы можем взять некоторый код из этого сообщения на форуме и использовать его так:

convert fox.jpg ( -clone 0 -fuzz 11% -transparent white -blur 0x1 ) -compose copy_opacity -composite fox_transparent_fuzzed_blurry_mask.png

Эта команда создает размытую маску, которая затем комбинируется с исходным изображением. Это результат:

ех. fox_transparent_fuzzed_blurry_mask

fox_transparent_fuzzed_blurry_mask

Вы можете видеть, что края теперь мягче:

fox_transparent_fuzzed_nojaggies

При необходимости мы можем сделать нечто подобное в два этапа:

convert fox.jpg -type Grayscale -negate -fill white -fuzz 11% +opaque "#000000" -blur 0x1 fox_blur_mask.jpg
convert fox.jpg fox_blur_mask.jpg -compose copy_opacity -composite fox_transparent_blur_mask_result.png

Первая команда:

  • Создает черно-белую версию изображения (-type Grayscale).

  • (Эффективно) инвертирует цвета для маскировки (-negate).

  • Использует -fill white -fuzz 11% +opaque "#000000" чтобы залить голову лисы белым (чтобы мы могли видеть большую часть исходного изображения).

  • Применяет к изображению светлое -blur 0x1 .

Это созданная маска, в которой все черное становится прозрачным на конечном изображении:

ех. fox_blur_mask

fox_blur_mask

Вторая команда просто комбинирует исходное изображение и маску вместе, чтобы получить этот результат:

ех. fox_transparent_blur_mask_result

fox_transparent_blur_mask_result

Вы заметите, что результат почти идентичен приведенному ранее примеру "все вместе":

fox_transparent_fuzzed_blurry_mask fox_transparent_blur_mask_result


Предостережения

  • Как уже отмечалось, приведенные предложения - не единственные способы достижения цели, и могут быть альтернативные / лучшие версии данных команд.

  • В этих примерах предполагается, что в исходном изображении нет прозрачности. Если есть, возможно, вам придется использовать различные опции / команды. Аналогично, эти предложения были протестированы только с файлами .jpg в качестве формата ввода и файлами .png в качестве формата вывода.

  • Основным недостатком -fuzz является то, что его трудно применять согласованным образом. -fuzz 11% - это то, что лучше всего подходит для примера изображения. -fuzz 10% или fuzz 12% , скорее всего, оставят нежелательные случайные пиксели. Другие значения -fuzz , вероятно, понадобятся для других изображений.

  • Эти предложения не касаются каких-либо подходов к сохранению определенных частей изображения того же цвета, что и фон (например, белые глаза лисы). Для этого вы, вероятно, захотите либо A) изменить маску в последнем примере, либо B) если вы хотите что-то вроде второго примера сверху, используйте

    convert fox.jpg -bordercolor white -border 1x1 -fuzz 11% -fill none -floodfill +0+0 white -shave 1x1 fox_flood_2_minimal.png
    
  • Обратите внимание, что приведенная выше команда была скопирована с уже предоставленной маскирующей ссылки.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .