Извлечь водяной знак из изображения - PullRequest
0 голосов
/ 22 сентября 2018

У меня есть 2 версии 1 изображения

1 image without watermark the same image, with a alpha-blended watermark

Возможно ли получить прозрачный pngфайл, представляющий этот водяной знак?Может ли ImageMagick сделать это?

Ответы [ 2 ]

0 голосов
/ 22 сентября 2018

SilverMonkey имеет базовое решение с использованием Imagemagick.Но просьба была о прозрачном PNG.Поэтому я добавлю немного больше к его коду, чтобы сделать его прозрачным, добавив -alpha copy.

convert kitty2.jpg kitty1.jpg -compose minus -composite -auto-level -alpha copy watermark1.png

enter image description here


Вотдругой подход, который делает бинарную маску для водяного знака путем установки порога.Но это оставляет много шума.Поэтому я использую некоторую открытую морфологию, чтобы удалить шум, а затем морфологическую близость, чтобы попытаться заполнить там, где текст разбит.Затем я добавляю -alpha copy, чтобы сделать изображение прозрачным.Но текст белый, а оригинальный водяной знак был светло-серый.Поэтому я отключаю альфа, умножьте на 0,75, чтобы уменьшить яркость белых букв до серого, не влияя на альфа-канал.Затем снова включите альфа-канал.

convert kitty2.jpg kitty1.jpg -compose minus -composite -threshold 0.6% -morphology open diamond:1 -morphology close octagon:1 -alpha copy -alpha off -evaluate multiply 0.75 -alpha on watermark2.png


enter image description here

Подробнее о морфологии см. https://imagemagick.org/Usage/morphology/

0 голосов
/ 22 сентября 2018

Вы можете достичь своей цели, рассчитав разницу между обоими изображениями (вычтите пиксели обоих изображений и рассчитайте абсолютное значение).Это приведет к: Subtracted image Кажется, ImageMagick способен к вычитанию изображения, посмотрите здесь : Код:

convert image2 image1 -compose minus -composite result
...