代码之家  ›  专栏  ›  技术社区  ›  jaudo

从图像中提取水印

  •  1
  • jaudo  · 技术社区  · 7 年前

    我有一张图片的两个版本

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

    有没有可能得到一个代表这个水印的透明png文件?ImageMagick能做到吗?

    2 回复  |  直到 7 年前
        1
  •  1
  •   fmw42    7 年前

    SilverMonkey有使用Imagemagick的基本解决方案。但要求的是一个透明的PNG。因此,我将在他的代码中添加更多的内容,通过添加-alpha copy使其透明。

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

    enter image description here


    这里是另一种方法,使一个二进制掩模的水印阈值。但是会留下很多噪音。所以我用一些形态学打开来去除噪音,然后用一些形态学关闭来填充文本被分割的地方。然后我添加-alpha拷贝使图像透明。但是文本是白色的,原始水印是浅灰色的。所以我关闭alpha,乘以0.75,将白色字母的亮度降低为灰色,而不影响alpha通道。然后再打开alpha通道。

    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/

        2
  •  1
  •   SilverMonkey    7 年前

    您可以通过计算两个图像之间的差值(减去两个图像的像素并计算绝对值)来实现您的目标。这将导致: Subtracted image look here

    convert image2 image1 -compose minus -composite result