Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用opencv去除背景条纹的想法_C++_Opencv_Image Processing - Fatal编程技术网

C++ 使用opencv去除背景条纹的想法

C++ 使用opencv去除背景条纹的想法,c++,opencv,image-processing,C++,Opencv,Image Processing,基本上我写了一个有两个图像的代码。参考img和背景img。到目前为止,我已经通过特征识别成功地找到了匹配的图像。然后我旋转它并调整大小,使其看起来与参考图像相同。剩下的唯一问题是,该图像与物体边缘上的一些背景图像一样。这张图片已经被适当裁剪,所以我只需要处理下面的图片。我首先想到的最明显的答案可能是使用一种边缘检测算法(canny),并用它来给我一个关于背景可能位于何处的线索。然而,由于图像本身在技术上可以是任何东西,我觉得会有很多噪音和各种不寻常的错误,所以如果可能的话,我宁愿不走这条路。我也

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

  BackgroundSubtractorMOG  bs_mog(3, 4, 0.8);
  Mat foreground_mog;
  bs_mog (cropped_img,  foreground_mog, -1.0);
也许我做错了。因此,我的想法不是边缘检测,如果backgroundsubtractorMOG仅用于运动图像,是否有其他想法或选项可以去除边缘背景图像(我想将其全部变成白色)

提前感谢您的想法和意见

编辑:


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

分段可以工作。请尝试使用一个新的工具
cvgrabCut()

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

您能否从参考图像中创建一个遮罩,并使用该遮罩与背景图像一起使用逻辑and来保留感兴趣的区域?