当前位置:   article > 正文

双指针仪表盘读数(二) ——表盘位置识别_指针仪表 多圈刻度圈识别

指针仪表 多圈刻度圈识别

本章节内容:表盘位置识别及位置固定

上表盘:

分析:

1.表盘为圆形,整个一帧视频中有多个圆形干扰,包括指针的中心小圆形,表盘外侧一大圈一小圈圆形及截图之外的圆形。

2.圆形识别本身包含大量计算,会占用大量资源

解决:

1.圆形表盘标准识别

  1. gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 转换为灰色通道
  2. A, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU) # 二值化
  3. circles = cv2.HoughCircles(
  4. binary, cv2.HOUGH_GRADIENT, 2, 1000, param1=100, param2=100, minRadius=10, maxRadius=5000) # 霍夫识别
  5. if circles is not None: # 如果识别出圆
  6. for circle in circles[0]:
  7. # 获取圆的坐标与半径
  8. x = int(circle[0])
  9. y = int(circle[1])
  10. r = int(circle[2])
  11. MX1 = x - r
  12. MX2 = x + r
  13. MY1 = y - r
  14. MY2 = y + r
  15. JDMX1 = 0
  16. if MX1 < 0:
  17. JDMX1 = -MX1
  18. MX1 = MX1 - MX1
  19. print(1)
  20. if MX2 < 0:
  21. MX2 = MX2 - MX2
  22. print(2)
  23. if MY1 < 0:
  24. JDMY1 = -MY1
  25. MY1 = MY1 - MY1
  26. print(3)
  27. if MY2 < 0:
  28. MY2 = MY2 - MY2
  29. print(4)
  30. draw(MY1, MY2, MX1, MX2)
  31. def draw(MY1, MY2, MX1, MX2):
  32. while (True):
  33. ret, frame = cap.read()
  34. maxTable = frame[MY1: MY2, MX1: MX2] # 将识别到的圆形所在的正方形截取出来
  35. a, b, c, d = msk(maxTable, x, y)
  36. # cv2.imshow('maxTable', maxTable)
  37. cv2.circle(frame, (x, y), r, (255, 255, 255), 3) # 标记圆
  38. cv2.circle(frame, (x, y), 3, (255, 255, 0), -1) # 标记圆心

2.采用第一次计算出的圆心位置以及圆的半径进行截取,使得圆形位置固定,后续操作都在截取的位置上进行分析

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号