如何使用遮罩方法准确地从图像中切出背景和主要物体?

问题描述 投票:0回答:1

我有一个主要对象为松饼和深色背景的图像。 使用蒙版图像,我想获得 2 个不同的图像,1 个用于没有松饼的背景,另一个是没有背景的松饼。

图片

蒙版图像

我将在下面描述我创建的步骤以及我现在遇到的问题:

第一步:我发现我得到的蒙版图像沿松饼的边缘有一些灰色像素。 因此,我运行下面的命令来“清理”蒙版图像,以确保所有黑色都是黑色。

convert mask.png -fuzz 100% -fill black -opaque black maskresult.png

Step2:与Step1类似的命令,确保非黑全白

convert maskresult.png -fuzz 100% -fill white -opaque white -threshold 50% maskresult2.png

第三步:剪掉背景。我可以看到一些松饼的边缘。我猜问题出在掩模图像上。我们可以清理边缘或以某种方式“模糊”边缘以使其不那么明显吗?

composite -compose minus maskresult2.png test.jpg maskresult3.png

maskresult3.png

第四步:反转蒙版图像,将松饼切出来,白切黑,黑切白。

convert maskresult2.png -negate maskresult4.png

maskresult4.png

第五步:把松饼切出来

composite -compose minus maskresult4.png test.jpg maskresult5.png

maskresult5.png

Step6:将松饼背景转换为透明。这也会导致松饼内的黑色像素变成透明的问题。如果我们仔细放大松饼的边缘,我们会到处看到一些透明像素,而且松饼的边缘也不光滑。

convert maskresult5.png -fuzz 0% -transparent black maskresult6.png

maskresult6.png

我需要如何做的建议,

  1. Step3和Step6将“黑色”变成透明而不影响背景和松饼?

  2. Step3,清洁松饼边缘,使其不那么明显

非常感谢!

image image-processing imagemagick graphicsmagick
1个回答
0
投票

此命令使用一个 ImagMagick 命令生成两幅输出图像,一幅只有松饼在透明背景上,另一幅只有背景和松饼所在的透明孔。

magick convert muffin.jpg null: ^
   ( muffmask.png -blur 0x1 ) ( +clone -negate ) ^
   -compose copyopacity -layers composite muffin-%02d.png

首先读取原始输入图像。然后在括号中,因此它不会影响输入图像,它会读取蒙版图像并将其模糊一点以柔化结果中的边缘。然后在括号中它再次克隆了那个模糊的蒙版,并用“-negate”交换了它的黑色和白色。

通过输入图像和两个版本的蒙版之间的 IM 特殊占位符图像“null:”,它使用操作“-layers composite”来创建两个单独的输出图像:松饼和背景。输出文件将命名为“muffin-01.png”和“muffin-02.png”。

该命令采用 Windows CLI 语法。对于 *nix 操作系统,您可能需要将续行插入符号“^”更改为反斜杠“\”,并使用反斜杠“\(...\)”转义括号。

© www.soinside.com 2019 - 2024. All rights reserved.