opencv的approxPolyDP函数

cv2.approxPolyDP() 是 OpenCV 库中的一个函数,用于逼近多边形曲线。它可以将一条曲线用更少的点来表示,同时尽可能地保持其形状。

原来是使用Douglas-Peucker算法,表示曲线上的点与逼近后的多边形之间的最大距离d,若d小于epsilon,则滤掉,否则保留。

函数原型:

复制代码
cv2.approxPolyDP(curve, epsilon, closed)

参数:

  • curve:要逼近的曲线,可以是 2D 点的列表或 NumPy 数组。
  • epsilon:逼近精度。它是一个距离值,表示曲线上的点与逼近后的多边形之间的最大距离。值越小,逼近越精确,但点数也可能越多。
  • closed:一个布尔值,指示曲线是否闭合。如果为 True,则函数将闭合曲线。

返回值:

函数返回一个逼近后的多边形,表示为 2D 点的列表或 NumPy 数组。

示例:

复制代码
import cv2

# 加载图像并提取轮廓
image = cv2.imread("image.png")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
_, contours, _ = cv2.findContours(gray, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

# 逼近第一个轮廓
contour = contours[0]
epsilon = 0.01 * cv2.arcLength(contour, True)      # 计算周长 * 0.01, 0.01是一个系数,可以调整
approx = cv2.approxPolyDP(contour, epsilon, True)

# 绘制逼近后的多边形
cv2.drawContours(image, [approx], 0, (0, 255, 0), 2)

# 显示结果
cv2.imshow("Image", image)
cv2.waitKey(0)

注意:

  • epsilon 值的选择是一个权衡,需要根据具体应用进行调整。
  • 对于闭合曲线,closed 参数应设置为 True。
  • cv2.approxPolyDP() 函数通常与 cv2.findContours() 函数一起使用,用于提取图像中的形状。
相关推荐
xiaoduo AI10 小时前
智能客服机器人能否实现多 LLM 自由切换?Agent 开放平台接入 DeepSeek、通义千问如何对比成本与效果?
大数据·人工智能·机器人
码流怪侠10 小时前
Matt Pocock Skills:AI 时代的真实工程技能库
人工智能·深度学习·github
日光明媚10 小时前
torch.compile 与 Triton 的加速本质:从原理到实际效果
人工智能·python·计算机视觉·stable diffusion·aigc
zubylon10 小时前
Ollama 本地起一个开发助手
前端·人工智能
福将~白鹿10 小时前
DeerFlow调研报告
人工智能
虾壳云管家10 小时前
OpenClaw 2.6.6 从部署到技能使用一站式攻略
人工智能·windows·openclaw·openclaw一键部署教程·openclaw安装教程
小妖同学学AI11 小时前
云原生AI服务新范式:Jina Serve框架,让多模态大模型落地像搭积木一样简单
人工智能·云原生·jina
FreeGo~11 小时前
LLM系列:2.pytorch入门:7.深层神经网络第一篇
人工智能·深度学习·神经网络
志摩凛11 小时前
领导亲手打造的“技术屎山连环套”:Figma→React→Vue→MCP调用毒瘤UI库,半成品Design Token让我们生不如死|五一节前的噩梦
人工智能·程序员
zfh2005062811 小时前
【保姆级教程】Open Claw 2.6.4 本地部署步骤+常见问题解答
人工智能·open claw·小龙虾·open claw安装