使用在一致背景下拍摄的衣服图像,我想让图像中的所有像素都透明,除了衣服。解决此问题的最佳方法是什么?我研究了为此常用的算法和开源库opencv。除了自己滚动或使用 opencv 之外,还有一种简单的方法可以做到这一点吗?我对任何语言或平台持开放态度。
谢谢
使用在一致背景下拍摄的衣服图像,我想让图像中的所有像素都透明,除了衣服。解决此问题的最佳方法是什么?我研究了为此常用的算法和开源库opencv。除了自己滚动或使用 opencv 之外,还有一种简单的方法可以做到这一点吗?我对任何语言或平台持开放态度。
谢谢
如果您的背景在图像中一致但在图像之间不一致可能会变得棘手,但这是我会做的:
这件衣服的边缘现在看起来有点难看,因为它由从背景和这件衣服中获取颜色的像素组成。为了解决这个问题,您需要做更多的工作:
基本上,找到背景的颜色并减去它,但我想你知道这一点。自动完成这一切有点棘手,但似乎有可能。
首先,看一下OpenCV 的blob 检测,看看这是否基本上为您完成。
自己做:
查找背景:有几种选择。可能最简单的方法是对图像进行直方图,并且具有相似值的大量像素是背景,如果有两个大集合,则背景将是中间有一个大洞的那个。另一种方法是将周边的带作为背景颜色,但这似乎较差,例如,来自闪光灯的反射可以显着增亮位于中心的背景像素。
删除背景:首先是根据背景颜色对图像进行阈值处理,然后对此运行“打开”或“关闭”算法,然后将其用作掩码来选择您的服装。(打开/关闭的重点是不要去除衣服上的小背景色物品,例如白色衬衫上的黑色纽扣,或者说黑色衣服上的明亮反射。)
OpenCV 是一个很好的工具。
最棘手的部分可能是物体周围的阴影(例如,白色背景上的黑色夹克在某些边缘会有连续的灰色阴影,在哪里进行切割?),但如果你走到这一步,发布另一个问题。
对于彩色图像,每张图片都具有相同的背景:
如果您知道背景的确切颜色强度并且它永远不会改变并且衣服永远不会与这种颜色相吻合,那么这是背景减法的简单应用,即所有不是特定颜色强度的东西都被认为是“开”像素,感兴趣的一个。然后,您可以使用连接组件标签 ( http://en.wikipedia.org/wiki/Connected_Component_Labeling ) 来确定对象的单独分组。