OpenCV如何检测曲线上的中心点位 而非线条两侧的轮廓点
手绘路径中心线提取实现方案
核心适配方案:图像细化(骨架提取)算法
该算法专门用于将有宽度的二值线条收缩为单像素宽度的中心线,完全匹配提取路径中心点位的需求,实现流程如下:
- 图像预处理
先将输入线稿转为灰度图,调用GaussianBlur接口去除噪点后,使用threshold或adaptiveThreshold接口做二值化处理,确保路线区域为前景(像素值255),背景为黑色(像素值0)。 - 执行细化操作
OpenCV未内置细化接口,可直接使用Zhang-Suen细化算法实现,执行后输出的结果就是单像素的路径中心线,所有前景像素点均为所需的中心坐标点。 - 坐标点序列整理
对细化后的二值图调用findContours接口提取轮廓,得到的轮廓点就是按路径顺序排列的中心点位,可直接输出用于机器人导航。
备选实现方案:距离变换法
如果场景中线条粗细变化不大,可选用该方案快速实现:
- 对预处理完成的二值图调用
distanceTransform接口,计算每个前景像素到最近背景像素的距离值,线条中心区域的距离值为局部最大值 - 对距离变换结果做非极大值抑制,保留所有局部最大值点,拼接后即可得到路径中心线。
内容的提问来源于stack exchange,提问作者devjardim
相关产品推荐
相关产品推荐

