python - 如何去除图像的白色背景并使其透明?

标签 python node.js image opencv image-processing

我正在尝试以编程方式删除少数图像的白色背景并使其透明。图像的格式很简单,它有一个白色的背景和一个主要位于中间的对象。

我想复制 https://remove.bg 的功能使图像背景透明的网站。

我曾尝试使用sharpimageMagick 软件使背景透明。但它使主要对象内的一些像素也变得透明。我绝对不想要。

imageMagik 中使用以下代码将白色背景转换为透明

转换 brownie.jpg -transparent white brownie.png

转换cakebig.jpg -fuzz 1% -transparent white cakebig.png

似乎效果不佳。

运行命令后,图像确实变得透明,但主要对象内的像素也很少受到影响。

输入图像 Input

ImageMagik 的输出(查看主要对象中的一些像素如何变得透明) Image magik

https://remove.bg 的预期输出(看对主体没有影响) Expected Output

这似乎是一个图像处理问题,OpenCV 似乎是解决此问题的最佳方案。我对图书馆了解不多,所以有点棘手。在查看一些代码时遇到了可用于图像分割的grab cutgraph cut 算法。但我对此并不完全确定。请帮助在 OpenCV 中找到正确的解决方案。

最佳答案

我将通过稍微模糊 alpha channel 添加一些抗锯齿来添加一些抗锯齿,然后将模糊值归零到中灰色以下,从而为 Mark Setchell 关于使用模糊泛光填充的出色 ImageMagick 回答添加更多信息。这将使模糊填充留下的锯齿状边缘变得平滑。请注意,模糊值太大会导致冰淇淋渗漏,因为冰淇淋的颜色与背景颜色相似。模糊值太小将无法充分去除背景。因此,此图像中的模糊值容差很严格。

输入:

enter image description here

对于 ImageMagick 6:

convert img.png -fuzz 2% -fill none -draw "matte 0,0 floodfill" -channel alpha -blur 0x2 -level 50x100% +channel result.png


对于 Imagemagick 7:

magick img.png -fuzz 2% -fill none -draw "alpha 0,0 floodfill" -channel alpha -blur 0x2 -level 50x100% +channel result.png


enter image description here

您需要下载结果才能看到背景是透明的,轮廓是平滑的。

关于python - 如何去除图像的白色背景并使其透明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57886049/

相关文章:

javascript - 为什么我的 Node 应用程序没有登录到终端或 Chrome 控制台?

javascript - 与 mongoDB(和 Mongoose )的 promise 链接。如果已发送响应,如何在 .then() 之后使用 .save() 并正确突破 promise 链?

python - 尝试使用 PIL 和 BytesIO 显示图像但不返回任何内容

python - 在Python中,如何进行字符串替换并检索替换的子字符串?

python - 任意精度的 numpy 数组(10 位整数)

javascript - 在 Typescript 中创建/修复 node-json2html 的声明文件

java - 为什么 Slick 向我发出有关 PNG 数据的警告?

html - 右边的 4 张图片作为侧边栏

c# - 如何使用 C# 执行协程?

python - insert 和 psycopg2 的问题