ToB企服应用市场:ToB评测及商务社交产业平台

标题: 【Python】【OpenCV】凸轮廓和Douglas-Peucker算法 [打印本页]

作者: 麻花痒    时间: 2024-2-6 12:45
标题: 【Python】【OpenCV】凸轮廓和Douglas-Peucker算法
针对遇到的各种复杂形状的主体,大多情况下,我们可以求得一个近似的多边形来简化视觉图像处理,因为多边形是由直线组成的,这样就可以准确的划分区域来便捷后续的操作。
 
cv2.arcLength() Method:
参数:
返回值:
 
cv2.approxPolyDP() Method:
参数:
返回值:
 
  1. 1 import cv2
  2. 2 import numpy
  3. 3
  4. 4 img = cv2.imread('../img/img.png', -1)
  5. 5 ret, thresh = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
  6. 6 contours, hier = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
  7. 7
  8. 8 img = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)
  9. 9 for c in contours:
  10. 10     # 计算轮廓的总长的百分之一,作为最大差值
  11. 11     epsilon = 0.01 * cv2.arcLength(c, True)
  12. 12     # 将轮廓近似为一个多边形
  13. 13     approx = cv2.approxPolyDP(c, epsilon, True)
  14. 14     # 获取轮廓的凸多边形,并且可以完全包含整个轮廓
  15. 15     hull = cv2.convexHull(c)
  16. 16
  17. 17     # cv2.drawContours(img, [c], -1, (0, 255, 0), 2)
  18. 18     cv2.drawContours(img, [approx], -1, (255, 255, 0), 2)
  19. 19     cv2.drawContours(img, [hull], -1, (0, 0, 255), 2)
  20. 20
  21. 21
  22. 22 # img = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)
  23. 23 # img = cv2.drawContours(img, contours, -1, (0, 255, 0), 2)
  24. 24 cv2.imshow('', img)
  25. 25 cv2.waitKey()
  26. 26 cv2.destroyAllWindows()
复制代码
 
上述代码中,可以修改 epsilon(ε)参数来获得不同逼近的多边形,当 epsilon(ε)越大,则得到的多边形越简易,越小则越贴近传入的轮廓形状。
 
运行结果:

 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4