最近遇到一個問題,如何讀取儀表中的指針指向的刻度
解決方法有多種,比如,方案一:模板匹配+邊緣檢測+霍夫直線檢測,方案二:神將網絡(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文章
4630瀏覽量
93365 -
OpenCV
+關注
關注
31文章
635瀏覽量
41563 -
cnn
+關注
關注
3文章
353瀏覽量
22338
原文標題:opencv如何讀取儀表中的指針刻度
文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
指針式萬用表測量電壓技巧
指針式萬用表與數字萬用表對比
指針式萬用表讀數技巧
電流計指針偏轉方向是正極還是負極
面試常考+1:函數指針與指針函數、數組指針與指針數組
![面試常考+1:函數<b class='flag-5'>指針</b>與<b class='flag-5'>指針</b>函數、數組<b class='flag-5'>指針</b>與<b class='flag-5'>指針</b>數組](https://file.elecfans.com/web2/M00/20/B3/pYYBAGGfNNmAK-PZAAJsGM5Cgk0227.jpg)
OpenCV圖像識別C++代碼
opencv-python和opencv一樣嗎
opencv的主要功能有哪些
三菱plc讀取485儀表程序案例教程
ELF 1技術貼|如何在Ubuntu中編譯OpenCV庫
![ELF 1技術貼|如何在Ubuntu<b class='flag-5'>中</b>編譯<b class='flag-5'>OpenCV</b>庫](https://file1.elecfans.com/web2/M00/EB/90/wKgaomZZjUuAPcB7AAA6n2s3T5U762.png)
指針式萬用表的使用方法
HDJZ-3E型便攜式交直流指示儀表檢定裝置基本概念與操作
![HDJZ-3E型便攜式交直流指示<b class='flag-5'>儀表</b>檢定裝置基本概念與操作](https://file1.elecfans.com/web2/M00/C8/68/wKgaomYUoiOAToz5AABLHrGi33g257.png)
使用OpenCV進行儀表指針刻度的識別與讀取
![使用<b class='flag-5'>OpenCV</b>進行<b class='flag-5'>儀表</b><b class='flag-5'>指針</b><b class='flag-5'>刻度</b>的識別與<b class='flag-5'>讀取</b>](https://file1.elecfans.com/web2/M00/C0/93/wKgZomXW4haAIC_xAACZr3UfwvA899.png)
評論