在OpenCv中扩展轮廓

时间:2012-11-06 09:51:39

标签: c++ image-processing opencv

我的几个轮廓由我的图像中的几个黑色区域组成。与这些黑色区域直接相邻的是一些不属于我的轮廓的较亮区域。我想将这些更亮的区域添加到我的黑色区域,从而在OpenCv中扩展我的轮廓 是否有方便的方法来扩展轮廓?我考虑过用cv::Sobel创建的渐变图像来查看强度变化并延伸到渐变再次变化,这意味着像素的强度将回到图像的既不是黑色也不是明亮的区域。

谢谢!

以下是示例图片。第一张图片显示原始图像,第二张图片显示使用Canny&amp ;; findContours,最后一个Sobel-Gradient强度相同区域的图像。 我想在第一张图片中加入明亮的边界到Contour。

enter image description here enter image description here enter image description here

更新:现在我在Sobelgradients上使用了一些形态学操作,并在它们周围添加了轮廓(见下图)。下一步可能是找到相邻的一对紫色&红色轮廓,但它似乎非常像浪费游行时间实际上必须搜索直接相邻的轮廓。有更好的想法吗?

enter image description here

更新2:我现在的解决方案是在我的(紫色)轮廓周围的边界框中搜索变形的渐变(红色)轮廓,然后选择一个方向正确的轮廓。尺寸。这适用于渐变轮廓,其中形态操作关闭了如图3所示的“上升”和“下降”梯度区域。但对于发光区域比上图中更宽的情况,它仍然是一个糟糕的解决方案。任何想法仍然非常感谢,谢谢!

1 个答案:

答案 0 :(得分:3)

您要做的是找到两个不同的功能并合并它们。这并不是非常困难,但你必须使用图像的多个副本来实现它。

  1. 制作一份副本,并为黑暗部分设置门槛
  2. 制作另一份副本并为灯光部分设置门槛
  3. 将两个阈值图像合并为新图像
  4. 应用开启或关闭等形态操作(取决于您的阈值)这将连接附近的组件
  5. 在结果图像中查找轮廓
  6. 在原始图像上使用这些轮廓。这将起作用,因为所有图像大小相同,都基于原始图像。