halcon學習備忘五(圖像選擇,剪切,obj循環,ocr識別)

1、在分割完輪廓線或者其他一些線條後,我們需要進行一些篩選來獲得我們想要的曲線,我們可以通過以下的算子來進行

(1).select_contours_xld( )  可以通過該算子設定篩選標準,比如根據線的長度contour_length或者曲率curvature來直接進行選擇 。

(2).get_contour_global_attrib_xld( ) 通過該算子獲得曲線的全局參數,例如曲率等,然後根據參數判斷選擇合適的曲線,如果想選擇圓弧的話,可以將參數設置爲‘cont_approx',然後用for循環進行遍歷分割的每個曲線,不同形狀的曲線該參數值不同,直線爲-1,橢圓爲0,圓爲1 。

2、區域剪切與輪廓剪切

(1).clip_region_rel( ) 通過該算子可以對區域上下左右四邊進行切割,比如都設置爲5,那麼每邊上都去除5個像素,然後剩下的就是切割出來的區域了

(2).clip_contours_xld( ) 通過該算子設定的區域即row1-row2 , column1-column2 ,然後將區域內的輪廓剪切下來。

3、obj的循環判斷

一個簡單的例子就明白了

count_obj(obj,num)

get_empty_obj(final_obj)

for i:=1 to num by 1

select_obj(obj,selectedobj,i)

......相關處理

if(某個條件)

concat_obj(final_obj,selectedobj,final_obj)

endif

endfor

通過以上處理,就可以將滿足一定條件的obj選出來,放到final_obj裏面了。

4、MLP光學字符識別

(1)單字符識別用do_ocr_single_class_mlp( )

主要步驟如下:

a).圖像分割,將字符區域從背景中分離出來,每個字符一個區域。

b).讀取ocr的mlp分類器read_ocr_class_mlp(FontName , OCRHandle) ,FontName是已經存在的分類器名稱,可以是'Industrial_0-9'或者'Industrial_0-9A-Z'也可以是自己訓練好的分類器。

c).for循環讀取每個字符區域,通過do_ocr_single_class_mlp( )進行每個字符識別,結果保存在Class裏面,Confidence是可信度。可以用來做評估。

d).清除分類器clear_ocr_class_mlp(OCRHandle)

(2)多字符識別用do_ocr_multi_class_mlp( )

多字符識別的步驟和單字符識別步驟基本一樣,不同的是具體識別算子分別用各自的,多字符識別的時候,將分割好的字符區域排好序後,直接將該區域集合作爲輸入,得到的識別結果全部保存在結果數組裏面,無需for循環一個一個輸入字符區域。

(3)區別與說明

一般情況下都會用多字符識別,因爲它的速度要比運用for循環進行單字符識別的速度快。但是多字符識別只能給出每個字符的最可能識別結果,而單字符識別可以給出前n個可能的識別結果,每個結果都有一個可信度,按降序排列。即,如果需要用到前幾個可能的結果時,那麼就得用單字符識別了,否則都用多字符識別。對於分類器的訓練,如果僅用到0-9和A-Z的字符識別的話,halcon以及提供訓練好的分類器了,當然也可以自己訓練分類器,然後保存訓練好的分類器,下次用時直接讀取就Ok了。例子可以參考halcon例程bottle.hdev、bottlet.hdev、engraved.hdev、engravedt.hdev。


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