【Python】【 OpenCV】凸轮廓和Douglas-Peucker算法


风晓
风晓 2023-12-29 10:58:17 54749 赞同 0 反对 0
分类: 资源
针对遇到的各种复杂形状的主体,大多情况下,我们可以求得一个近似的多边形来简化视觉图像处理,因为多边形是由直线组成的,这样就可以准确的划分区域来便捷后续的操作。

cv2.arcLength() Method:

参数:

  • curve:要计算周长的轮廓,可以是一个矩形、圆形、多边形等封闭曲线。
  • closed:一个布尔值,表示轮廓是否为封闭曲线。如果 closed=True,则假设轮廓是闭合的;如果 closed=False,则假设轮廓是开放的。

返回值:

  • retval:给定轮廓的周长或长度。如果轮廓是一个封闭曲线(如圆形、多边形等),则 retval 表示该曲线的周长;如果轮廓是一条开放曲线(如一条直线),则 retval 表示该曲线的长度。

 

cv2.approxPolyDP() Method:

参数:

  • curve:要逼近的输入轮廓。
  • epsilon:指定逼近精度的参数,即逼近多边形与原始曲线之间的最大距离。这个参数决定了逼近的精度,值越小表示逼近得越精确。通常情况下,这个值是一个很小的正数。
  • closed:一个布尔值,表示逼近多边形是否是封闭的。如果 closed=True,则表示输出的逼近多边形是封闭的,即首尾相连形成一个闭合多边形;如果 closed=False,则表示输出的逼近多边形是开放的。

返回值:

  • approxCurve:表示逼近后的多边形曲线。这是一个新的轮廓,它是对输入轮廓进行多边形逼近后得到的结果。

 

复制代码
 1 import cv2
 2 import numpy
 3 
 4 img = cv2.imread('../img/img.png', -1)
 5 ret, thresh = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
 6 contours, hier = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
 7 
 8 img = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)
 9 for c in contours:
10     # 计算轮廓的总长的百分之一,作为最大差值
11     epsilon = 0.01 * cv2.arcLength(c, True)
12     # 将轮廓近似为一个多边形
13     approx = cv2.approxPolyDP(c, epsilon, True)
14     # 获取轮廓的凸多边形,并且可以完全包含整个轮廓
15     hull = cv2.convexHull(c)
16 
17     # cv2.drawContours(img, [c], -1, (0, 255, 0), 2)
18     cv2.drawContours(img, [approx], -1, (255, 255, 0), 2)
19     cv2.drawContours(img, [hull], -1, (0, 0, 255), 2)
20 
21 
22 # img = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)
23 # img = cv2.drawContours(img, contours, -1, (0, 255, 0), 2)
24 cv2.imshow('', img)
25 cv2.waitKey()
26 cv2.destroyAllWindows()
复制代码

 

上述代码中,可以修改 epsilon(ε)参数来获得不同逼近的多边形,当 epsilon(ε)越大,则得到的多边形越简易,越小则越贴近传入的轮廓形状。

 

运行结果:

如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!

评价 0 条
风晓L1
粉丝 1 资源 2038 + 关注 私信
最近热门资源
桌面通用(全架构)【在双系统环境下隐藏Windows启动菜单】操作指南  2073
银河麒麟桌面操作系统V10(SP1)2203-如何进行远程桌面互访?  2003
银河麒麟桌面操作系统【保留数据盘重装系统】  1812
麒麟系统各种原因开不了机解决(合集)  1610
桌面通用(全架构)【rpm包转成deb包】操作方法  932
银河麒麟桌面操作系统 V10-SP1 双系统安装 efi 分区问题  916
统信系统安装(合集)  854
统信桌面专业版【手动分区安装UOS系统】介绍  846
统启动异常几种类型(initramfs 模式)  691
银河麒麟桌面操作系统V10SP1(全架构)【更改屏保文字信息】操作方法  3
最近下载排行榜
桌面通用(全架构)【在双系统环境下隐藏Windows启动菜单】操作指南 0
银河麒麟桌面操作系统V10(SP1)2203-如何进行远程桌面互访? 0
银河麒麟桌面操作系统【保留数据盘重装系统】 0
麒麟系统各种原因开不了机解决(合集) 0
桌面通用(全架构)【rpm包转成deb包】操作方法 0
银河麒麟桌面操作系统 V10-SP1 双系统安装 efi 分区问题 0
统信系统安装(合集) 0
统信桌面专业版【手动分区安装UOS系统】介绍 0
统启动异常几种类型(initramfs 模式) 0
银河麒麟桌面操作系统V10SP1(全架构)【更改屏保文字信息】操作方法 0
作者收入月榜
1

prtyaa 收益393.72元

2

zlj141319 收益221.42元

3

1843880570 收益214.2元

4

IT-feng 收益213.03元

5

风晓 收益208.24元

6

777 收益172.82元

7

Fhawking 收益106.6元

8

信创来了 收益105.89元

9

克里斯蒂亚诺诺 收益91.08元

10

技术-小陈 收益79.65元

请使用微信扫码

加入交流群

请使用微信扫一扫!