You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python图像识别:求箭头方向的非模型训练解决方案

箭头方向识别的非机器学习方案(基于轮廓/多边形)

针对已有轮廓(contours)和多边形(polygons)的箭头方向识别,以下是几种无需训练模型的实用方案:

方案1:重心+顶点向量分析

  • 计算多边形质心(适用于简单多边形):
    A = 0.5 * Σ(xᵢyᵢ₊₁ - xᵢ₊₁yᵢ)  // 多边形面积,xₙ₊₁=x₁, yₙ₊₁=y₁
    Cx = (1/(6A)) * Σ(xᵢ + xᵢ₊₁) * (xᵢyᵢ₊₁ - xᵢ₊₁yᵢ)
    Cy = (1/(6A)) * Σ(yᵢ + yᵢ₊₁) * (xᵢyᵢ₊₁ - xᵢ₊₁yᵢ)
    
  • 遍历所有顶点,计算顶点到质心的欧氏距离,找到距离最大的顶点——这就是箭头尖端。
  • 筛选尾部顶点:在剩余顶点中,找出两个距离较近、且与“尖端-质心”向量方向相反(向量点积为负且绝对值大)的顶点,取二者中点作为尾部中心。
  • 箭头方向为尾部中心指向尖端的向量方向。

方案2:凸包+极点曲率分析

  • 对多边形轮廓计算凸包(可使用OpenCV的convexHull函数),凸包会保留箭头的关键极点(尖端、尾部两端点)。
  • 计算凸包顶点的曲率:对凸包上连续三点Pᵢ₋₁、Pᵢ、Pᵢ₊₁,计算向量Pᵢ₋₁Pᵢ与PᵢPᵢ₊₁的夹角,夹角越小(越尖锐)的点即为箭头尖端。
  • 确定尾部:凸包中除尖端外,距离最近的两个顶点为尾部端点,取二者中点,箭头方向为尾部中点指向尖端。

方案3:霍夫变换+线段聚类

  • 先对多边形轮廓做简化处理(如Douglas-Peucker算法),减少顶点数量、过滤噪声点。
  • 用霍夫线段变换检测轮廓内所有线段,筛选长度排名前三的线段。
  • 聚类线段方向:最长线段为箭杆,另外两条短线段(箭头两翼)会与箭杆形成30°-60°的夹角,找到这两条线段的交点即为尖端,箭杆的延伸方向就是箭头指向。

方案4:二阶矩主方向分析

  • 计算轮廓的二阶中心矩,通过矩矩阵推导轮廓主方向(即箭杆方向):
    // 二阶矩矩阵
    M = [[μ₂₀, μ₁₁],
         [μ₁₁, μ₀₂]]
    // 主方向θ满足:tan(2θ) = 2μ₁₁/(μ₂₀ - μ₀₂)
    
  • 结合质心,找到主方向正方向上离质心最远的顶点作为尖端,箭头方向为主方向指向尖端的方向。

前置优化建议

  • 先对轮廓做简化处理,降低后续计算复杂度;
  • 若存在多个轮廓,可通过面积、外接矩形长宽比(箭头通常大于2:1)筛选目标轮廓。

内容的提问来源于stack exchange,提问作者stam shem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 00:05:27