【发布时间】:2016-08-07 01:21:48
【问题描述】:
我有一个熔炼立方体的图像,随着时间的推移形成一个液滴。到目前为止,我提取了它的轮廓,但接下来我需要区分对象和表面。我的想法是检测物体接触表面的角落,但我正在努力寻找一种合理的方法来做到这一点(最好使用 opencv 的 c++ 接口)。如有任何建议,我将不胜感激。
以下是提取轮廓的一些示例:
编辑: @哈里斯:
我已经尝试了你的建议的一个变体,它正在为我做这项工作:
在近似轮廓中,我从左侧接近,寻找具有指定范围内的值的第一个角度,然后从右侧寻找相同的角度。由于近似的轮廓点是原始轮廓点的子集,因此我确定了原始序列中的 2 个角点,并在两个角处对其进行切割。中间部分我作为水滴,左右部分我重新组合为我的表面线。可能有更好、更稳定的方法,但这对我有用。谢谢!
【问题讨论】:
-
用原始图像(以阈值为例)可能会更容易区分物体与表面。我们可以看到原图吗?
-
第一个想法。如果轮廓点按顺序存储(因为它们在图像中)。我将选择一个“好的”d_Index 表示〜5(用于平滑的小噪声)并为每个点 i 计算“切线”向量 P[i+5]-P[i]。相邻切向量的内积将显示角下降。找到液滴的最小位置/i(通过线性插值??)。第一个 min i_h 和最后一个 min i_e 将从 all 中分割出对象的轮廓。如果需要该区域,请在原始图像中从 P[i_h] 到 P[i_e] 画一条线,然后再次找到轮廓。
标签: c++ opencv image-processing