【发布时间】:2012-10-26 06:06:09
【问题描述】:
我的图像中有几个由多个黑色区域组成的轮廓。与这些黑色区域直接相邻的是一些不属于我的轮廓的较亮区域。我想将这些较亮的区域添加到我的黑色区域,从而在 OpenCv 中扩展我的轮廓。
有没有一种方便的方法来扩展轮廓?我考虑查看使用cv::Sobel 创建的渐变图像的强度变化,并一直延伸到渐变再次发生变化,这意味着像素的强度将回到图像的既不是黑色区域也不是明亮区域。
谢谢!
这里是示例图片。第一张图片是原始图像,第二张是使用 Canny 和 findContours 提取的 Contour,最后一张是同一区域的 Sobel-Gradient 强度图像。 我想在轮廓的第一张图像中包含明亮的边界。
更新:现在我在 Sobelgradients 上使用了一些形态学运算,并在它们周围添加了一个轮廓(见下图)。下一步可能是找到相邻的一对紫色和红色轮廓,但实际上必须搜索直接相邻的轮廓似乎非常浪费时间。有更好的想法吗?
更新 2:我现在的解决方案是在我的(紫色)轮廓周围的边界框中搜索变形渐变(红色)轮廓,然后选择具有正确方向和大小的轮廓。这适用于梯度轮廓,其中形态学操作关闭了“上升”和“下降”梯度区域,如图 3 所示。但对于照明区域比上图中更宽的情况,它仍然是一个糟糕的解决方案。任何想法仍然非常感谢,谢谢!
【问题讨论】:
-
请提供示例图片!!!
-
好的,添加一些图片和澄清我的问题。
标签: c++ image-processing opencv