OpenCV与AI深度学习 | OpenCV如何读取仪表中的指针刻度

本文来源公众号“OpenCV与AI深度学习,仅用于学术分享,侵权删,干货满满。

原文链接:OpenCV如何读取仪表中的指针刻度

最近遇到一个问题,如何读取仪表中的指针指向的刻度。

 解决方法有多种,比如:

  1. 方案一:模板匹配+边缘检测+霍夫直线检测,
  2. 方案二:神将网络(CNN)目标定位等,其中CNN就有点麻烦了,需要一定数量的训练样本,太麻烦,
  3. 方案三:模板匹配+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

源码如下:

THE END!

文章结束,感谢阅读。您的点赞,收藏,评论是我继续更新的动力。大家有推荐的公众号可以评论区留言,共同学习,一起进步。

  • 11
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值