ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

12. 形态学--轮廓、多边形逼近与凸包

2022-06-26 21:01:36  阅读:131  来源: 互联网

标签:12 多边形 img -- cv2 凸包 RETR contours 轮廓


1. 轮廓

findContours(image, mode, method[, contours[, hierarchy[, offset]]])

  • mode查找轮廓的模式
    cv2.RETR_EXTEERNAL = 0,表示指检测外围扩阔
    cv2.RETR_LIST = 1,检测的轮廓不建立等级关系,即检测所有的轮廓
    cv2.RETR_CCOMP = 2,每层最多两级,从小到大,从里到外
    cv2.RETR_TREE = 3,按照树型存储轮廓,从大到小,从右到左,较为常用
  • method 轮廓近似方法,也叫ApproximationMode
    cv2.CHAIN_APPROX_NONE 保存所有轮廓上的点
    cv2.CHAIN_APPROX_SIMPLE 只保存角点,存储信息少,比较常用
  • 反馈contours和hierarchy 即轮廓和层级
img = cv2.imread('./contors1.jpeg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, binary = cv2.threshold(gray, 150, 255, cv2.THRESH_BINARY)
# 注意contours是一个list,里面的元素是ndarray,每个ndarray表示一个contour
contours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

# 注意,会直接在原图上进行操作,如果要原图保持不变,就需要copy一份
img_copy = img.copy()
cv2.drawContours(img_copy, contours, 1, (0,0,255), 2)

# 计算轮廓面积
area = cv2.contourArea(contours[1])

# 计算轮廓周长
cv2.arcLength(contours[1], closed=True)

# 返回结果是一个Rotated Rect 旋转的矩形,矩形的起始坐标(x, y), 矩形的长宽,矩形的旋转角度
# boundingRect(points) 最大外接矩阵
rect = cv2.minAreaRect(contours[1])

# cv的工具,将旋转矩阵的四个坐标点计算出来
# 注意:这个计算出来后的数据是float,而在绘图的时候,要求像素点位置,是int的
box = cv2.boxPoints(rect)
# 对boxPoints的结果进行处理
box = np.round(box).astype('int64')
cv2.drawContours(img, [box], 0, (255,0,0), 2)
cv2.imshow('img', img)

2. 多边形逼近与凸包

findContours后的轮廓信息contours可能过于复杂不平滑,可以用approxPolyDP函数对该多边形曲线做适当近似,这就是轮廓的多边形逼近;
DP算法原理核心,不断找多边形最远的点加入形成新的多边形,直到最短距离小于指定的精度;
approxPolyDP(curve, epsilon, closed, approxCurve=None)

  • curve 要近似逼近的轮廓
  • epsilon 即DP算法使用的阈值
  • closed 轮廓是否闭合

标签:12,多边形,img,--,cv2,凸包,RETR,contours,轮廓
来源: https://www.cnblogs.com/TheoryDance/p/16414334.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有