最近遇到一個問題,如何讀取儀表中的指針指向的刻度
解決方法有多種,比如,方案一:模板匹配+邊緣檢測+霍夫直線檢測,方案二:神將網(wǎng)絡(luò)(CNN)目標(biāo)定位等,
其中CNN就有點(diǎn)麻煩了,需要一定數(shù)量的訓(xùn)練樣本,太麻煩,而方案一太普通,最后我采用了方案三,
方案三:模板匹配+k-means+直線擬合
具體做法如下:
首先說一下模板匹配,它是OpenCV自帶的一個算法,可以根據(jù)一個模板圖到目標(biāo)圖上去尋找對應(yīng)位置,如果模板找的比較好那么效果顯著,這里說一下尋找模板的技巧,模板一定要標(biāo)準(zhǔn)、精準(zhǔn)且特征明顯。
第一次的模板選取如下:
匹配的效果如下:
根據(jù)模板選取的原則我們,必須進(jìn)行兩次匹配才能的到精確和更高準(zhǔn)確率的結(jié)果
第二次的模板如下:
然后在第一次結(jié)果的的基礎(chǔ)上也就是藍(lán)色矩形框區(qū)域進(jìn)行第二次匹配,結(jié)果如下:
下面對上圖進(jìn)行k-means二值化,由于途中的陰影,所以只截取原圖的0.6(從中心)作為k-means聚類的樣本點(diǎn),然后將聚類結(jié)果應(yīng)用至上圖并重新二值化(聚類結(jié)果為2,求中值,根據(jù)中值二值化),同時只保留內(nèi)切圓部分,效果如下:
接下來就是擬合直線,擬合直線我采用旋轉(zhuǎn)虛擬直線法,假設(shè)一條直線從右邊0度位置順時針繞中心旋轉(zhuǎn)當(dāng)它轉(zhuǎn)到指針指向的位置時重合的最多,此時記錄下角度,最后根據(jù)角度計算刻度值。效果圖如下:
最后就讀取到了數(shù)值:
聚類結(jié)果:
[[31.99054054 23.04324324 14.89054054]
[62.69068323 53.56024845 40.05652174]]
重合數(shù)量和對應(yīng)角度:(1566, 158)
對應(yīng)刻度:36.005082940886126
源碼如下:
審核編輯 :李倩
-
算法
+關(guān)注
關(guān)注
23文章
4592瀏覽量
92538 -
OpenCV
關(guān)注
29文章
625瀏覽量
41218 -
cnn
+關(guān)注
關(guān)注
3文章
350瀏覽量
22144
原文標(biāo)題:opencv如何讀取儀表中的指針刻度
文章出處:【微信號:vision263com,微信公眾號:新機(jī)器視覺】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論