車牌識別的第一步就是先隨便在路邊上找一輛車,把他的車牌號拍下來留作影像處理的圖片,
為了保護隱私,只露出后面部分,

顯而易見,R通道的影像對比度更高,所以我們接下來選用R通道的影像來進行OCR提取識別,
*對比效果R通道的影像對比效果最好,接下來就是用R通道的影像提取識別OCR
dev_display (R)
*接下來就是摳圖,可以直接框選ROI區域,也可以通過預處理得到OCR區域,下面我就是用預處理的方法來獲取
fast_threshold (R, Region, 150, 255, 30)
connection (Region, ConnectedRegions)
*通過層層條件限制選出我們想要的OCR區域
select_shape (ConnectedRegions, SelectedRegions, ['width','area','height'], 'and', [68.43,2826.65,137.45], [200.01,10000,500])
union1 (SelectedRegions, RegionUnion)
shape_trans (RegionUnion, RegionTrans, 'rectangle2')
area_center (RegionTrans, Area, Row, Column)
orientation_region (RegionTrans, Phi)
*求出區域的方向后,需要根據Phi的絕對值是靠近0還是3.14,來決定Angle2這個值是填rad(0)還是rad(180)
vector_angle_to_rigid (Row, Column, Phi, Row, Column, rad(180), HomMat2D)
affine_trans_region (RegionTrans, RegionAffineTrans, HomMat2D, 'nearest_neighbor')
affine_trans_image (R, ImageAffinTrans, HomMat2D, 'constant', 'false')
reduce_domain (ImageAffinTrans, RegionAffineTrans, ImageReduced)
*由于halcon支持的ocr識別是需要將字體轉正,不能偏斜,而且要滿足白底黑字的情況下才能識別,所以我們需要將影像反轉一下
invert_image (ImageReduced, ImageInvert)
threshold (ImageInvert, Region1, 0, 90)
connection (Region1, ConnectedRegions1)
select_shape (ConnectedRegions1, SelectedRegions1, 'area', 'and', 4340.23, 10000)
*得到OCR區域后,開始讀取ocr,由于這張圖的拍攝角度有點問題,所以4和R字符明顯還是處于斜著的狀態
*但是讀取的結果還行,只有4讀取錯誤,其他的都是正確的,當然我們也可以把每個字都分割出來單獨矯正
*位置,一個for回圈的事情,可以自己私下去試試,主要這個就是一般的OCR識別的步驟,
read_ocr_class_mlp ('Industrial_0-9A-Z_NoRej.omc', OCRHandle)
do_ocr_multi_class_mlp (SelectedRegions1, ImageInvert, OCRHandle, Class, Confidence)
摳出來的以及反轉的影像:


下面就是一些將讀取結果顯示在影像視窗的小事了,就懶得寫了,處理出來的結果顯示:

主要的來說,對于這種字體不粘連,很清晰的情況下,大致的OCR識別方法大致就是這樣,那么當我們遇到一些字體提取出來有粘連的情況,或者一些噴涂字樣的字體,我們需要特殊的處理方式,下面我會繼續寫出來,如果遇到halcon中的字庫識別不出來的字體,那么就是自己訓練了,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/246616.html
標籤:其他
上一篇:500L學院實驗室污水處理設備
下一篇:C++結構體
