最近遇到一个问题,如何读取仪表中的指针指向的刻度
解决方法有多种,比如,方案一:模板匹配+边缘检测+霍夫直线检测,方案二:神将网络(CNN)目标定位等,
其中CNN就有点麻烦了,需要一定数量的训练样本,太麻烦,而方案一太普通,最后我采用了方案三,
方案三:模板匹配+k-means+直线拟合
具体做法如下:
首先说一下模板匹配,它是OpenCV自带的一个算法,可以根据一个模板图到目标图上去寻找对应位置,如果模板找的比较好那么效果显著,这里说一下寻找模板的技巧,模板一定要标准、精准且特征明显。
第一次的模板选取如下:
匹配的效果如下:
根据模板选取的原则我们,必须进行两次匹配才能的到精确和更高准确率的结果
第二次的模板如下:
然后在第一次结果的的基础上也就是蓝色矩形框区域进行第二次匹配,结果如下:
下面对上图进行k-means二值化,由于途中的阴影,所以只截取原图的0.6(从中心)作为k-means聚类的样本点,然后将聚类结果应用至上图并重新二值化(聚类结果为2,求中值,根据中值二值化),同时只保留内切圆部分,效果如下:
接下来就是拟合直线,拟合直线我采用旋转虚拟直线法,假设一条直线从右边0度位置顺时针绕中心旋转当它转到指针指向的位置时重合的最多,此时记录下角度,最后根据角度计算刻度值。效果图如下:
最后就读取到了数值:
聚类结果:
[[31.99054054 23.04324324 14.89054054]
[62.69068323 53.56024845 40.05652174]]
重合数量和对应角度:(1566, 158)
对应刻度:36.005082940886126
源码如下:
审核编辑 :李倩
-
算法
+关注
关注
23文章
4716浏览量
95767 -
OpenCV
+关注
关注
32文章
643浏览量
43109 -
cnn
+关注
关注
3文章
354浏览量
22783
原文标题:opencv如何读取仪表中的指针刻度
文章出处:【微信号:vision263com,微信公众号:新机器视觉】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
称重控制仪表通过工业网关数据采集到MES系统中
为LSDK构建opencv时遇到的问题求解
RTOS中的本地存储指针使用

指针式万用表测量电压技巧
指针式万用表与数字万用表对比
指针式万用表读数技巧
指针式万用表和数字万用表哪个好
指针式万用表使用指南
指针式万用表测量精度比较
指针被释放后就变成了空指针吗
虹科免拆诊断 | 2017款凯迪拉克XT5车组合仪表上的指针均失灵

C语言指针运算符详解
电流计指针偏转方向是正极还是负极
【龙芯2K0300蜂鸟板试用】5 搭建opencv开发环境
面试常考+1:函数指针与指针函数、数组指针与指针数组

评论