赞
踩
本章节内容:表盘位置识别及位置固定
上表盘:
分析:
1.表盘为圆形,整个一帧视频中有多个圆形干扰,包括指针的中心小圆形,表盘外侧一大圈一小圈圆形及截图之外的圆形。
2.圆形识别本身包含大量计算,会占用大量资源
解决:
1.圆形表盘标准识别
- gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 转换为灰色通道
- A, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU) # 二值化
-
- circles = cv2.HoughCircles(
- binary, cv2.HOUGH_GRADIENT, 2, 1000, param1=100, param2=100, minRadius=10, maxRadius=5000) # 霍夫识别
- if circles is not None: # 如果识别出圆
- for circle in circles[0]:
- # 获取圆的坐标与半径
- x = int(circle[0])
- y = int(circle[1])
- r = int(circle[2])
- MX1 = x - r
- MX2 = x + r
- MY1 = y - r
- MY2 = y + r
- JDMX1 = 0
-
- if MX1 < 0:
- JDMX1 = -MX1
- MX1 = MX1 - MX1
- print(1)
- if MX2 < 0:
- MX2 = MX2 - MX2
- print(2)
- if MY1 < 0:
- JDMY1 = -MY1
- MY1 = MY1 - MY1
- print(3)
- if MY2 < 0:
- MY2 = MY2 - MY2
- print(4)
- draw(MY1, MY2, MX1, MX2)
-
- def draw(MY1, MY2, MX1, MX2):
- while (True):
- ret, frame = cap.read()
- maxTable = frame[MY1: MY2, MX1: MX2] # 将识别到的圆形所在的正方形截取出来
- a, b, c, d = msk(maxTable, x, y)
- # cv2.imshow('maxTable', maxTable)
- cv2.circle(frame, (x, y), r, (255, 255, 255), 3) # 标记圆
- cv2.circle(frame, (x, y), 3, (255, 255, 0), -1) # 标记圆心

2.采用第一次计算出的圆心位置以及圆的半径进行截取,使得圆形位置固定,后续操作都在截取的位置上进行分析
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。