单个图像的OpenCV背景分割/减法

时间:2014-09-02 06:38:15

标签: c++ opencv edge-detection background-subtraction

我正在寻找一些指导......我有一张护照照片。我想做的是将人与背景分开。然后我将分析背景颜色,图案等。

我已经对分割做了一些研究,我发现的大部分内容都是使用多个帧。不幸的是,我只有一个框架,没有人可以拍摄背景照片。

我也看过GrabCut,但我不希望用户必须手动选择图像的背景/前景部分。是否有可能的自动化版本?

我在考虑使用轮廓/边缘(canny?)检测?...

提前谢谢!

编辑:可以在此处找到示例图像集:http://imgur.com/a/PKTDc#0


所以我遵循了Froyo的建议,到目前为止得到了以下结果:http://imgur.com/Mvwwu9f.png

由于面部检测矩形,一些边缘被切掉,因此在检测到面部时我需要增加矩形的大小。

1 个答案:

答案 0 :(得分:4)

你可以使用GrabCut而不需要手动输入。您应该使用Haar Cascades检测面部并将边界框传递给GrabCut。我认为这会奏效。

我在分割前景和背景方面有一些经验,但我也有一个视差图,所以它更容易一些。我使用超像素并将它们聚集在一起以获得单独的前景和背景。

SLIC和SLICO是超像素分割的最先进算法。以下是该领域的一些工作。

https://cvhci.anthropomatik.kit.edu/~baeuml/downloads/Schick2012.pdf

http://www.cs.huji.ac.il/~daphna/papers/Rosenfeld_ICCV2011.pdf

您也可以尝试Saliency Maps。它们用于从图像中提取显着对象,在您的情况下是您正在寻找的前景。