【Python】【OpenCV】凸轮廓和Douglas-Peucker算法
1.【Python】【ChatGPT】本地部署ChatGPT学习记录2.【Python】【OpenCV】【NumPy】图像和原始字节的转换3.【Python】【OpenCV】【NumPy】图像数据的访问4.【Python】【OpenCV】视频帧和摄像头帧操作 and 窗口显示5.【Python】【OpenCV】Cameo项目(一)实时显示摄像头帧6.【Python】【OpenCV】边缘检测和创建自定义核7.【Python】【OpenCV】轮廓检测8.【Python】【OpenCV】绘制外接矩形、外接圆
9.【Python】【OpenCV】凸轮廓和Douglas-Peucker算法
10.【Python】【OpenCV】检测直线和圆11.【Python】【OpenCV】定位条形码(一)12.【Python】【OpenCV】定位条形码(二)moments和HuMoments13.【Python】【OpenCV】关于cv2.findContours()轮廓索引(编号)解析(RETR_TREE)14.【Python】【OpenCV】定位二维码15.【Python】【OpenCV】OCR识别(一)——目标区域定位16.【Python】【OpenCV】OCR识别(二)——透视变换17.【Python】【OpenCV】OCR识别(三)——字符识别针对遇到的各种复杂形状的主体,大多情况下,我们可以求得一个近似的多边形来简化视觉图像处理,因为多边形是由直线组成的,这样就可以准确的划分区域来便捷后续的操作。
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(ε)越大,则得到的多边形越简易,越小则越贴近传入的轮廓形状。
运行结果:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)