怎么在python中利用opencv对指针仪表读数识别

  介绍

这篇文章给大家介绍怎么在python中利用opencv对指针仪表读数识别,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

<强> 1。先模板匹配,然后边缘检测+霍夫直线

怎么在python中利用opencv对指针仪表读数识别

<强> 2。按轮廓大小过滤,然后边缘检测+霍夫直线

怎么在python中利用opencv对指针仪表读数识别

两种方式对光线都非常敏感
其中第一种的应用范围更广,背景复杂一点也能识别到
个人比较喜欢这种方式

第二种的限制多一点,对背景,光线条件要求比较高
对于固定位置,且明暗变化不大的情况下,这种方式还是很有效的

先说第一个方案,第二个方式就不说了

第一种方式:模板匹配,然后边缘检测+霍夫直线

if  __name__ ==,“__main__":   #,才能加载模板   template 才能=,cv2.imread(& # 39; 001.。/数据/jpg # 39; (1)   #,才能初始化   时间=am 才能;C_ammerter(模板)   #,才能运行   am.am_run才能()   #,才能结束   am.close才能()

<强>下面给出def am_run(自我)函数的处理流程,

其中边缘检测之前需要对图像做一些处理:

, def  am_run(自我):   ,,,while 正确的:   ,,,,,受潮湿腐烂,,frame =, self.cap.read ()   ,,,,,if  frame  is 没有:   ,,,,,,,印刷(& # 39;video  picture  is  none ——continue  & # 39;)   ,,,,,,,继续      ,,,,,gray =, frame.copy ()   ,,,,,#,cv2.imshow(& # 39;起源# 39;,,灰色)      ,,,,,#,匹配模板,框出匹配区域   ,,,,,image =, gray.copy ()   ,,,,,,maxval t_left,, b_right =, self.get_match(灰色)   ,,,,,if  maxval  & lt;, 16000000000:, #,对匹配程度做判断   ,,,,,,,印刷(“- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -产生绯闻。)   ,,,,,,,印刷(& # 39;matchTemplate  is  not  enough ——继续# 39;)   ,,,,,,,印刷(“- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -产生绯闻。)   ,,,,,,,result =框架   ,,,,,,,=帧图像   ,,,,,其他的:      ,,,,,,,cv2.rectangle (t_left,形象,还以为,b_right, 255, 2)            ,,,,,,,#,高斯除噪   ,,,,,,,kernel =, np.ones ((6,6), np.float32),/36   ,,,,,,,gray_cut_filter2D =, cv2.filter2D(图像(t_left [1]: t_left [1], +, self.h,, t_left [0]: t_left [0], +, self.w],, 1,,内核)      ,,,,,,,#,灰度图,二值化   ,,,,,,,gray_img =, cv2.cvtColor (gray_cut_filter2D, cv2.COLOR_BGR2GRAY)   ,,,,,,,受潮湿腐烂,,thresh2 =, cv2.threshold (gray_img,, 180,, 255,, cv2.THRESH_BINARY)      ,,,,,,,#,二值化后,分割主要区域,减小干扰,模板图尺寸371 * 369   ,,,,,,,tm =, thresh2.copy ()   ,,,,,,,test_main =, tm(50:321 50:319也)      ,,,,,,,#,边缘化检测   ,,,,,,,edges =, cv2.Canny (test_main, 50岁,150年,apertureSize=3)      ,,,,,,,#,霍夫直线   ,,,,,,,lines =, cv2.HoughLines(边缘,,1,,np.pi /, 180年,60)   ,,,,,,,if  lines  is 没有:   ,,,,,,,,,继续   ,,,,,,,result =, edges.copy ()      ,,,,,,,for  line 拷贝行[0]:   ,,,,,,,,,rho =,行[0],#,第一个元素是距离ρ   ,,,,,,,,,theta =,行[1],#,第二个元素是角度θ   ,,,,,,,,,印刷(& # 39;距离:& # 39;,+,str(ρ),& # 39;θ:& # 39;,+,str (((/theta  np.pi), *, 180)))   ,,,,,,,,,lbael_text =, & # 39;距离:& # 39;,+,str(圆(ρ))+,& # 39;θ:& # 39;,+,str(圆((/theta  np.pi), *, 180 - 90, 2))   ,,,,,,,,,cv2.putText(图像,lbael_text, (t_left [0], t_left [1] -12), cv2.FONT_HERSHEY_SIMPLEX, 1, (0255 0), 2)   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

怎么在python中利用opencv对指针仪表读数识别