最近遇到一個問題,如何讀取儀表中的指針指向的刻度
解決方法有多種,比如,方案一:模板匹配+邊緣檢測+霍夫直線檢測,方案二:神將網絡(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文章
4624瀏覽量
93116 -
OpenCV
+關注
關注
31文章
635瀏覽量
41421 -
cnn
+關注
關注
3文章
353瀏覽量
22267
原文標題:opencv如何讀取儀表中的指針刻度
文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論