我有这个代码来做到这一点:
$im = new Imagick("test.jpg");
$im->paintTransparentImage($im->getImageBackgroundColor(), 0, 500);
$im->setImageFormat('png');
$im->writeImage('finish.png');
这就是结果(我手动添加粉红色背景以更好地查看问题):
当我增加fuzz
时,对象旁边会有更多白色像素消失,但随后更多白色像素也会在对象内消失。
我在网站上尝试了相同的图像,结果如下:
这是非常完美的。有人知道怎么做吗?
如果有人需要原始图片进行测试:
更新
在$im->despeckleimage();
之前添加$im->paintTransparentImage
可以获得更好的结果:
唯一需要做的就是用白色像素填充小空白区域。有没有办法做到这一点?
答案 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
变量创建了黑色背景。
这就是我所获得的。
访问THIS PAGE了解此算法的详细信息和使用的参数。您也可以在彩色背景上进行遮罩。
我也相信imagik
同样可以尝试。希望这会有所帮助:)
修改强>
这是对您对该问题进行的编辑的回应。
以下是您上传的图片:
我应用了阈值并获得了以下图像:
现在我进行了形态学关闭&#39;操作并获得了这个:
最后,我使用您在开头上传的原始图像屏蔽了上面的图像,以获取此信息: