介绍
这篇文章给大家介绍怎么在python中利用opencv对指针仪表读数识别,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
<强> 1。先模板匹配,然后边缘检测+霍夫直线强>
<强> 2。按轮廓大小过滤,然后边缘检测+霍夫直线强>
两种方式对光线都非常敏感
其中第一种的应用范围更广,背景复杂一点也能识别到
个人比较喜欢这种方式
第二种的限制多一点,对背景,光线条件要求比较高
对于固定位置,且明暗变化不大的情况下,这种方式还是很有效的
先说第一个方案,第二个方式就不说了
第一种方式:模板匹配,然后边缘检测+霍夫直线
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对指针仪表读数识别