从图像中删除白色背景并使用 PHP 使其透明
Remove white background from the image and make it transparent using PHP
我得到了这个代码来做到这一点:
$im = new Imagick("test.jpg");
$im->paintTransparentImage($im->getImageBackgroundColor(), 0, 500);
$im->setImageFormat('png');
$im->writeImage('finish.png');
这是结果(我手动添加了粉红色背景以更好地查看问题):
当我增加 fuzz
时,对象旁边会消失更多的白色像素,但对象内部也会有更多的白色像素消失。
我在网站上尝试了相同的图片,结果是:
非常完美。有人知道该怎么做吗?
如果有人需要原始图像进行测试:
更新:
在$im->paintTransparentImage
前加$im->despeckleimage();
效果更好:
唯一需要做的就是用白色像素填充小的空白区域。有什么办法吗?
我使用 GrabCut 算法 获得了即时解决方案。我使用带有 python 的 OpenCV 3 来获得所需的输出。不幸的是,我不知道 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
也可以尝试同样的方法。希望这有帮助:)
编辑:
这是对您对问题所做编辑的回应。
以下是您上传的图片:
我应用了阈值并获得了以下图像:
现在我进行了'morphological closing'操作,得到了这个:
最后我用你一开始上传的原图蒙版上面的图得到这个:
我得到了这个代码来做到这一点:
$im = new Imagick("test.jpg");
$im->paintTransparentImage($im->getImageBackgroundColor(), 0, 500);
$im->setImageFormat('png');
$im->writeImage('finish.png');
这是结果(我手动添加了粉红色背景以更好地查看问题):
当我增加 fuzz
时,对象旁边会消失更多的白色像素,但对象内部也会有更多的白色像素消失。
我在网站上尝试了相同的图片,结果是:
非常完美。有人知道该怎么做吗?
如果有人需要原始图像进行测试:
更新:
在$im->paintTransparentImage
前加$im->despeckleimage();
效果更好:
唯一需要做的就是用白色像素填充小的空白区域。有什么办法吗?
我使用 GrabCut 算法 获得了即时解决方案。我使用带有 python 的 OpenCV 3 来获得所需的输出。不幸的是,我不知道 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
也可以尝试同样的方法。希望这有帮助:)
编辑:
这是对您对问题所做编辑的回应。
以下是您上传的图片:
我应用了阈值并获得了以下图像:
现在我进行了'morphological closing'操作,得到了这个:
最后我用你一开始上传的原图蒙版上面的图得到这个: