本次Halcon實驗僅考慮給定圖片的提取,實際項目運用需要考慮通用性及提取失敗的處理,僅供學習使用。
提取過程如下,供參考:
1:讀取原圖
read_image (Bottleletter, 'D:/Camera/bottleletter.png')
rgb1_to_gray (Bottleletter, GrayImage)
2:二值化,找到原圖瓶蓋的邊緣;
threshold (GrayImage, Regions, 79, 240)
3:圖形形態學處理:利用圓形腐蝕,減少識別區域:
erosion_circle (Regions, RegionErosion, 70)
4:凸性處理:注意不要使用內接圓,防止出現圓環;
shape_trans (RegionErosion, RegionTrans, 'convex')
5:和原圖相減,獲取裁剪後的圖形:
reduce_domain (GrayImage, RegionTrans, ImageReduced)
6:爲了過濾圖中“保質期6個”及下面文字“沙拉醬香”的影響,此處在原圖中畫一個長度等於原圖尺寸,高度只有一半的矩形來分割原圖,實際項目識別中,需要儘量保持瓶蓋爲一個方向拍照且圖片的視野處於中心水平線位置;
gen_rectangle1 (ROI_1_0, 0.0, 0.0927928, 270.668, 656.907)
reduce_domain (ImageReduced, ROI_1_0, ImageReduced1)
7:再次分割圖形後的結果:
8:圖形灰度值線性變換處理:增強“曝光度”,白的更白
9:圖形增強:增強對比度
10:二值化及分割連通域
threshold (ImageEmphasize, Regions1, 0, 132)
connection (Regions1, ConnectedRegions)
11:根據面積,長、寬等特性選擇所需區域:
select_shape (ConnectedRegions, LetterRegions, ['area','height'], 'and', [43.71,22.217], [113.13,50])
12:特性選擇後,對區域排序,爲日期字符識別做準備,不排序,可能出現:0 7 2 9 20 等雜亂無章的情形;
sort_region (LetterRegions, SortedLetters, 'character', 'true', 'column')
13:字符識別及顯示
read_ocr_class_mlp ('Industrial_0-9_NoRej.omc', OCRHandle)
do_ocr_multi_class_mlp (SortedLetters, ImageReduced1, OCRHandle, Class, Confidence)
disp_message (WindowHandle, Class, 'window', 12, 12, 'black', 'true')
完工!!!