4

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

谢谢!

以下是示例图像。第一张图片是原始图像,第二张是使用 Canny 和 findContours 提取的 Contour,最后一张是同一区域的 Sobel-Gradient 强度图像。我想在轮廓的第一张图像中包含明亮的边界。

在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

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

在此处输入图像描述

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

4

1 回答 1

3

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

  1. 制作一份副本,并将其作为暗部分的阈值
  2. 制作另一个副本并为浅色部分设置阈值
  3. 将两个阈值图像合并为一个新图像
  4. 应用形态学操作,如打开或关闭(取决于您的阈值)这将连接附近的组件
  5. 在结果图像中查找轮廓
  6. 在原始图像上使用这些轮廓。这将起作用,因为所有图像的大小都相同,并且都基于原始图像。
于 2012-12-10T04:27:45.050 回答