使用opencv删除背景条纹的想法

时间:2013-07-10 05:12:57

标签: c++ opencv image-processing

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

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

也许我做错了。所以我的想法不仅仅是边缘检测,如果backgroundsubtractorMOG只用于运动图像,那么我可以调查任何其他想法或选项来删除条纹背景图像(我想把它全部变成白色)

enter image description here

提前感谢您的想法和意见

编辑:

我已经完成了其他人已经发布的逻辑,但我不确定为这个底部图像制作掩码的最佳方法是什么。重要的是要注意图像在技术上可以是任何东西。没有必要圆形。此外,由于算法的变化,在将对象与背景分离后,必须调整形状的大小。这意味着我不能使用我的参考图像来制作一个遮罩,并且由于尺寸不同而在该图像上使用该遮罩。

1 个答案:

答案 0 :(得分:0)

细分可行。使用customized mask尝试cvgrabCut()

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

enter image description here

相关问题