我有一个DIY家庭摄影棚来拍照。我希望他们在纯白色的背景(#FFFFFF)和最少的用户交互
这是我的原始图片(没有任何处理,只是相机的原始图片)
我用opencv和Tkinter for UI实现了简单的python程序
1)使用对象(ROI)获取rect
我决定用UI来选择ROI,也许以后我会编写代码来自动识别照片上的对象。在
2)使用cv2.grabCut函数,我尝试从这个矩形中剪切背景
cv2.grabCut(image, self.mask, rect, bgdmodel, fgdmodel, 5, cv2.GC_INIT_WITH_RECT)
3)如有必要,我为grabcut创建自定义掩码,以提供更精确的对象提取
^{pr2}$
4)在这一步之后,我可以在我的对象所在的地方创建蒙版。我还将蒙版的大小调整为30像素mask = cv2.resize(mask, ( crop_img.shape[1] + 30, crop_img.shape[0] + 30))
mask = mask[30 : crop_img.shape[0], 30 : crop_img.shape[1]]
所以这个面具更宽更高
5)我将此掩码用于无缝克隆方法src_bg = 255 * np.ones(self.src.shape, self.src.dtype)
width, height, channels = src_bg.shape
center = (int(height / 2), int((width / 2)))
output = cv2.seamlessClone(crop_img, src_bg, mask, center, cv2.MIXED_CLONE)
得到这样的结果:
看起来不错,除了物体右侧的一些文物。我的面具好像不太合适。这不是一个真正的问题。真正的问题是:无缝玻璃给我的不是真正的白色背景。查看级别:
一些奇怪的渐变和背景在右下角并不是真正的白色。我尝试了很多图片,但经常会有这样的事情。在
我的问题是:什么才是做我想做的事的正确方法?是我的方法可以用于这个任务和如何使真正的白色(#ffffffff)背景没有这样的梯度。谢谢
1万+

被折叠的 条评论
为什么被折叠?



