【问题标题】:Remove white background from the image and make it transparent using PHP从图像中删除白色背景并使用 PHP 使其透明
【发布时间】:2017-05-22 09:58:45
【问题描述】:

我得到了这个代码:

$im = new Imagick("test.jpg");
$im->paintTransparentImage($im->getImageBackgroundColor(), 0, 500);
$im->setImageFormat('png');
$im->writeImage('finish.png');

这是结果(我手动添加了粉红色背景以更好地查看问题):

当我增加fuzz 时,更多的白色像素会在对象旁边消失,但更多的白色像素也会在对象内消失。

我在网站上尝试了相同的图像,结果是:

这是非常完美的。有人知道该怎么做吗?

如果有人需要原始图像进行测试:

更新:

$im->paintTransparentImage 之前添加$im->despeckleimage(); 可以获得更好的结果:

唯一需要做的就是用白色像素填充小的空白区域。有什么办法吗?

【问题讨论】:

  • 第二种解决方案是最糟糕的,它只是删除了每个白色像素,第三种不是 PHP。谁能告诉我用 PHP 的解决方案吗?
  • 第一个解决方案也只去除了 100% 白色像素,你为什么还要回答
  • 对不起我的错。
  • @AnneSchwarz 你用什么 html 来获得第三个解决方案?你可以编辑你的问题并添加它吗?另外,您添加了什么代码来增加模糊度?你能用更相关的代码详细说明你的问题吗?
  • "你用什么 html 来获得第三个解决方案?"什么? oO fuzz 在代码中设置为 500

标签: php image-processing imagick


【解决方案1】:

我使用 GrabCut 算法获得了即时解决方案。我使用 OpenCV 3 和 python 来获得你想要的输出。不幸的是,我不知道php,也不知道imagik

代码:

import numpy as np
import cv2

img = cv2.imread('Dress.jpg',1)
cv2..imshow('Original image',img)
mask = np.zeros(img.shape[:2],np.uint8)

bgdModel = np.zeros((1,65),np.float64)
fgdModel = np.zeros((1,65),np.float64)

rect = (60,20,325,503)

cv2.grabCut(img,mask,rect,bgdModel,fgdModel,5,cv2.GC_INIT_WITH_RECT)
mask2 = np.where((mask==2)|(mask==0),0,1).astype('uint8')
nimg = img*mask2[:,:,np.newaxis]

cv2.imshow("Extracted image",nimg)

cv2.waitKey()
cv2.destroyAllWindows()

我首先使用mask 变量创建了一个黑色背景。

这是我得到的。

访问THIS PAGE了解该算法的详细信息和使用的参数。您也可以将其用于在彩色背景上进行遮罩。

我相信imagik 也可以尝试相同的方法。希望这会有所帮助:)

编辑:

这是对您对问题所做的修改的回应。

以下是您上传的图片:

我应用了阈值,得到了以下图像:

现在我进行了“形态闭合”操作,得到了这个:

最后我用你一开始上传的原图屏蔽了上面的图片,得到了这个:

【讨论】:

  • 看起来很不错。我要去检查那里使用的算法,并在我可以使用那里的东西时提供反馈。我刚刚更新了问题,请检查一下。也许您知道用白色像素填充小空白区域的解决方案?
  • 是的,明白了。将您的图像转换为二值图像(黑白),使粉红色变为黑色,而裙子保持白色。现在执行形态闭合操作。完成!!!
  • 这看起来很有希望,但我现在遇到了主机问题,我会尽快执行并提供反馈:D
  • 好的,我可以再试一次,有必要在开始时将背景设置为黑色吗?你能告诉我哪些值必须在: thresholdimage($threshold * \Imagick::getQuantum(), $channel); ?
  • 您可以为背景添加任何颜色。我选择黑色是因为它与白色连衣裙形成鲜明对比。我为 python 代码选择的阈值是 127。
猜你喜欢
  • 2011-12-23
  • 2011-12-06
  • 2020-01-13
  • 2017-02-27
  • 1970-01-01
  • 1970-01-01
  • 2012-09-21
  • 2012-05-31
  • 2010-11-02
相关资源
最近更新 更多