有没有一种算法可以使用opencv分离图像的前景和背景

Is there an algorithm to separate both foreground and backgound of an image using opencv

是否有一种算法可以使用 open-CV 将图像的前景和背景分开?

有人可以帮助我吗?我很困惑在哪里可以找到解决方案。

我正在使用 open-CV

是的!你可以做一些叫做背景减法的事情。您可以在 OpenCV 网站上找到完整的教程 here

本教程向您展示如何:

  • 使用 VideoCapture 或图像序列从视频中读取数据 使用 imread;

  • 使用 BackgroundSubtractor 创建和更新背景模型 class;

  • 使用imshow获取并显示前景遮罩;

  • 保存输出,使用imwrite对结果进行定量评估。

如果没有干净的平板背景,导致背景减法不可行(尽管您仍然可以使用自适应背景分割方法),您可以采用基于图形切割的方法,例如 OpenCV 的 grabcut 函数.

这是一种交互式分割算法,需要用户为前景创建边界框并(可选)将一些像素标记为前景的种子,然后执行图形切割 - 首先它将图像建模为图并解决最小切割算法以产生分割。我发现 OpenCV 实现即使对于在所需前景边界周围具有合理颜色可分离性的具有挑战性的图像也能很好地工作。

获得前景后,只需从原始图像中减去前景即可获得背景。希望这有帮助。