从图像中删除白色背景并使用PHP

时间:2017-01-07 20:13:26

标签: php image-processing imagick

我有这个代码来做到这一点:

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

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

enter image description here

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

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

enter image description here

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

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

enter image description here

更新

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

enter image description here

唯一需要做的就是用白色像素填充小空白区域。有没有办法做到这一点?

1 个答案:

答案 0 :(得分:0)

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

<强> CODE:

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变量创建了黑色背景。

这就是我所获得的。

enter image description here

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

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

修改

这是对您对该问题进行的编辑的回应。

以下是您上传的图片:

enter image description here

我应用了阈值并获得了以下图像:

enter image description here

现在我进行了形态学关闭&#39;操作并获得了这个:

enter image description here

最后,我使用您在开头上传的原始图像屏蔽了上面的图像,以获取此信息:

enter image description here