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

如何从凸四边形轮廓点集中提取顶点坐标?

凸四边形轮廓顶点提取方案

核心思路(算法层面)

针对凸四边形的特性,以下两种方法鲁棒性较强,不受点集粒度影响:

  1. 凸包提取:凸四边形的所有轮廓点的凸包即为其本身,直接提取凸包顶点即可,自动筛选最外层顶点。
  2. 多边形近似:将连续轮廓点拟合为极简多边形,通过控制近似精度,直接得到四边形的四个顶点。

Python 实现示例

方法1:利用凸包算法(scipy)

import numpy as np
from scipy.spatial import ConvexHull

def get_convex_quad_vertices(outline):
    # 转换为numpy数组格式
    points = np.array(outline)
    # 计算凸包
    hull = ConvexHull(points)
    # 获取凸包顶点(按逆时针顺序排列)
    vertices = points[hull.vertices].tolist()
    # 处理可能存在的共线冗余点,确保最终得到4个顶点
    if len(vertices) != 4:
        vertices = simplify_collinear_points(vertices)
    return vertices

def simplify_collinear_points(points):
    # 移除共线冗余点
    simplified = []
    point_count = len(points)
    for i in range(point_count):
        p_prev_prev = points[(i-2) % point_count]
        p_prev = points[(i-1) % point_count]
        p_curr = points[i % point_count]
        # 通过叉积判断三点是否共线,叉积绝对值小于阈值则视为共线
        cross_product = (p_prev[0]-p_prev_prev[0])*(p_curr[1]-p_prev_prev[1]) - (p_prev[1]-p_prev_prev[1])*(p_curr[0]-p_prev_prev[0])
        if abs(cross_product) > 1e-6:
            simplified.append(p_prev)
    # 补充最后一个点并去重
    simplified.append(points[-1])
    simplified = list(set(tuple(p) for p in simplified))
    return [list(p) for p in simplified]

方法2:利用OpenCV多边形近似

若项目已引入OpenCV,该方法更便捷:

import cv2
import numpy as np

def get_quad_vertices_opencv(outline):
    # 转换为OpenCV要求的数组格式
    points = np.array(outline, dtype=np.int32).reshape((-1, 1, 2))
    # 计算轮廓周长,用于设置近似精度
    perimeter = cv2.arcLength(points, closed=True)
    # 执行多边形近似,epsilon为周长的1%-2%,可根据实际调整
    approx = cv2.approxPolyDP(points, epsilon=0.01*perimeter, closed=True)
    # 提取并转换为列表格式的顶点
    vertices = [tuple(p[0]) for p in approx]
    return vertices if len(vertices) ==4 else []

注意事项

  • 若轮廓点存在大量重复,可先通过list(set(outline))去重(元组格式的点可直接哈希),再进行后续处理。
  • 浮点阈值(如1e-6)可根据点集的坐标精度调整,避免浮点误差导致的误判。
  • 两种方法均无需依赖极值点,能直接获取全部四个顶点,鲁棒性优于线性规划或极值点方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 16:50:21