【问题标题】:Finding people silhouette in OpenCV C++在 OpenCV C++ 中寻找人物剪影
【发布时间】:2012-01-19 07:39:32
【问题描述】:

我想提取照片中人的轮廓并移除背景。可以拍全身,也可以只拍上半身,也可以只拍下半身。

到目前为止,我所做的是使用 Haar Cascades 跟踪面部,但我使用的算法在面部上做了一个矩形,我需要整个身体的形状。我也尝试过 HOG,但它也给了我一个矩形,并且不适用于所有照片。

如果有人可以帮助我,那就太好了。我正在使用 OpenCV 和 C++。

【问题讨论】:

    标签: opencv image-segmentation object-detection


    【解决方案1】:

    您可以尝试 GrabCut 或 GraphCut 算法(至少在 OpenCV 中存在 Grabcut)。

    你告诉他们矩形(身体所在的位置),他们会尽力切割里面的物体。它并不快,也不完美,但你很难找到更好的东西。

    这是一个开放的研究领域,所以如果你的图像没有按照你的意愿被裁剪,请准备好几年的博士后研究,以找到更好的算法:)

    【讨论】:

    • 为了完整起见,GraphCut 并不是一种轮廓检测,而是一种背景分割算法。它不是训练计算机来寻找一个人,这将是极其困难的,而是使用背景信息来提取前景。它并非旨在将前景分类为人或任何其他对象,但如果您保证输入数据中的前景是人,则您已检测到它是剪影。
    • 嗨,伊恩,感谢您的帮助。我已经尝试过这个算法。但问题是当我使用它时,它会做一些奇怪的事情。例如,如果我选择这个人,它会针对身体的某些部位和环境的某些部位进行分割。无论如何,我会尝试更改一些参数,看看是否可以获得更好的结果。再次感谢。米格尔
    • 如果您要使用背景分割方法,我认为 GraphCut 是一种矫枉过正,它并非设计用于实时应用程序(可能与 GPU 实现一起使用)。我从未使用过这种算法,但看到我的一个朋友对其进行性能分析并得出结论,在大多数情况下,简单的背景减法加上一些腐蚀/膨胀算法就足够了。
    猜你喜欢
    • 1970-01-01
    • 2012-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多