【问题标题】:ideas for removing background fringes using opencv使用opencv去除背景边缘的想法
【发布时间】:2013-07-10 05:12:56
【问题描述】:

基本上我写了一个有两个图像的代码。参考图像和背景图像。到目前为止,我已经通过使用特征识别成功找到了匹配的图像。然后我旋转它并调整它的大小,使其看起来与参考图像相同。剩下的唯一问题是图像作为一些背景图像位于对象的边缘。此图像已被适当裁剪,因此我只需要使用下面的图像。我首先想到的最明显的答案可能是使用边缘检测算法(canny)并用它来给我一个关于背景可能在哪里的线索。然而,由于图像本身在技术上可能是任何东西,我觉得会有很多噪音和各种不寻常的错误,所以如果可能的话,我宁愿不想走那条路。我还看到了背景减法 MOG,但它似乎适用于视频,而不适用于单个静止图像。万一我错了,我尝试了以下代码,但效果为 0:

  BackgroundSubtractorMOG  bs_mog(3, 4, 0.8);
  Mat foreground_mog;
  bs_mog (cropped_img,  foreground_mog, -1.0);

也许我做错了。所以我的想法不是边缘检测,如果 backgroundsubtractorMOG 仅用于移动图像,是否有任何其他想法或选项我可以考虑删除边缘背景图像(我想把它全部变成白色)

提前感谢您的想法和 cmets

编辑:

好吧,我理解其他人已经发布的逻辑,但我不确定为这个底部图像制作蒙版的最佳方法是什么。重要的是要注意,图像在技术上可以是任何东西。不需要圆形。同样由于算法的变化,必须在对象与背景分离后调整形状的大小。这意味着由于尺寸不同,我不能使用我的参考图像来制作蒙版并在此图像上使用该蒙版。

【问题讨论】:

  • 您能否从您的参考图像中创建一个蒙版,并使用它与背景图像进行逻辑与来仅保留感兴趣的区域?

标签: c++ opencv image-processing


【解决方案1】:

分段可以工作。试试cvgrabCut()customized mask

  • 设置为背景所有非常接近边界的像素。 (下图中红色)
  • 将图像的中心区域设置为前景。 (下图中的绿色)
  • 任何中间像素都将它们设置为可能是前景。 (下图中灰色)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-27
    • 1970-01-01
    • 1970-01-01
    • 2020-08-31
    • 1970-01-01
    • 2016-09-11
    • 2013-02-24
    相关资源
    最近更新 更多