opencv+tensorflow實現車牌識別

分三步走

1車牌的提取

1.1對灰度圖先做高斯平滑,canny邊緣提取,findcontours 找出長寬比大致爲2到5.5之間的矩形。

可能找出來的有好幾個。需要做車牌矩形排除

1.2使用size(19,4)的內核開閉運算,找出來的車牌矩形比較理想

像下面兩張效果不太理想,車牌數字被截斷了。需要進一步精確定位處理。

 

1.3 進行一定的仿射變換將某些車牌擺正。

先找出車牌的輪廓最小矩形。因爲車牌有可能是傾斜的,使用minAreaRect可以找到最貼近的最小矩形。

但是實際操作發現minAreaRect 面對旋轉矩形時還行。面對不規則形狀時變現一般。

minAreaRect 返回的四個點座標

[43.0054, 353.255]
[36.3634, 41.0774]
[270.874, 36.0878]
[277.516, 348.266]

這個負數座標真的過分,不知道是怎麼算出來的...

[142.15, 219.369]
[49.8584, 69.3948]
[174.893, -7.54938]
[267.185, 142.425]

最終還是決定採用直線求交點的方法。利用初中的知識。

設已知的一條線段的起點和終點爲(x1,y1),(x2,y2),另一條爲 (x3,y3),(x4,y4);首先求出兩條線段的一次函數,再聯立求出交點座標

交點公式:
x=(y3x4x2-y4x3x2-y3x4x1+y4x3x1-y1x2x4+y2x1x4+y1x2x3-y2x1x3)/x4y2-x4y1-x3y2+x3y1-x2y4+x2y3+x1y4-x1y3

y=(-y3x4y2+y4x3y2+y3x4y1-y4x3y1+y1x2y4-y1x2y3-y2x1y4+y2x1y3)/y4x2-y4x1-y3x2+x1y3-y2x4+y2x3+y1x4-y1x3
————————————————
版權聲明:本文爲CSDN博主「Tron_future」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/Tron_future/article/details/77828665

Madcola的做法

1.4 車牌矩形排除:

使用HSV空間--計算藍色, 黃色,綠色的像素點是否佔總像素的一半以上。是則判定爲車牌。下圖爲算法選中的車牌矩形。我把它作爲roi截取出來

1.5 精確定位處理:

具體步驟:先擴大矩形範圍, 再使用HSV顏色空間,再定位,縮小邊緣。在正常情況下,車身與車牌不同色,可以通過H值的不同輕鬆區分。但是當車身與車牌顏色相近時,H值就不管用了。

例如下圖中的車身其實是淡藍色的,H=107,S=30

而車牌是深藍色的,H=107,S=160.所以只能用S值的不同來區分

先看看效果吧(我覺得這效果剛剛的)。


總結:這種精確定位的算法有侷限性,很難做到通用,對於不同的輸入圖片需要調整H,S,V的判斷閾值。

 

1.6 樓主現在也束手無策的情形:

黃色車身,識別黃色車牌! (車身與車牌的HSV值幾乎一致。完全做不了精確定位)

思前想後之下,突發奇想,既然我後面的數字識別都用了minst , 爲什麼車牌定位不乾脆也使用yolo等物體檢測網絡來預測呢。

此處靜聽下回分解。

2車牌數字的分割

2.1 利用線掃進行字體的分割。

效果如圖:

3輸入minst神經網絡得出結果

原圖:

輸出:(那個點網絡識別不了,變成了J)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章