翼度科技»论坛 编程开发 python 查看内容

【Python】【OpenCV】绘制外接矩形、外接圆 以及 凸轮廓和Douglas-Peucker

2

主题

2

帖子

6

积分

新手上路

Rank: 1

积分
6
 外接矩形、外接圆:
  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 for c in contours:
  9. 9     # 寻找平行于 x轴、y轴 的外接矩形坐标 -> 左上角坐标、宽度、高度
  10. 10     rectangle = cv2.boundingRect(c)
  11. 11     x, y, w, h = rectangle
  12. 12     # 绘制外接矩形
  13. 13     cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 2)
  14. 14
  15. 15     # 寻找包含前景图的 可旋转 最小外接矩形 -> 中心点坐标、宽度、高度
  16. 16     rect = cv2.minAreaRect(c)
  17. 17     # 寻找旋转矩形的四个顶点 -> 左上角、右上角、右下角和左下角的顶点坐标
  18. 18     box = cv2.boxPoints(rect)
  19. 19     # 取整
  20. 20     box = numpy.int0(box)
  21. 21     # 绘制外接矩形,对box打包成列表是因为drawContours希望接收为tuple or list
  22. 22     # 或者说是一个iterable
  23. 23     cv2.drawContours(img, [box], 0, (0, 0, 255), 3)
  24. 24
  25. 25     # 计算最小外接圆 -> 圆心坐标、半径
  26. 26     (x, y), radius = cv2.minEnclosingCircle(c)
  27. 27     # 取整
  28. 28     center = int(x), int(y)
  29. 29     radius = int(radius)
  30. 30     # 绘制圆形
  31. 31     img = cv2.circle(img, center, radius, (0, 255, 0), 2)
  32. 32
  33. 33
  34. 34 img = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)
  35. 35 img = cv2.drawContours(img, contours, -1, (0, 255, 0), 2)
  36. 36 cv2.imshow('', img)
  37. 37 cv2.waitKey()
  38. 38 cv2.destroyAllWindows()
复制代码
 
1、cv2.boundingRect() Method 和 cv2.minAreaRect() Merhod:前者只寻找和 x、y轴 平行的矩形,后者则可以出现旋转角度。
2、cv2.drawContours() Method:第二个参数接收的是轮廓信息,但是这个轮廓信息需要以 tuple or list 类型(或者说是iterable)才可以传入。
 

来源:https://www.cnblogs.com/vangoghpeng/p/17878334.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具