Halcon一維碼查詢
一、影象預處理和條碼增強
對比度太低:scale_image(或使用外部程式scale_image_range),增強影象的對比度。
影象模糊:emphasize銳化影象,使條碼看起來更清晰。
深色背景上讀取淺色條碼:invert_image反轉影象。
二、解碼涉及的主要運算元
read_image :讀圖
create_bar_code_model :建立條碼模型
find_bar_code :查詢條碼
clear_bar_code_model :清除條碼模型
如果條碼非常簡單,那麼順次執行上面4個運算元就可以完成解碼了。另外還有幾個運算元也很重要:
set_bar_code_param :設定解碼時的引數
decode_bar_code_rectangle2 :在指定的矩形區域內解碼
get_bar_code_param :獲取解碼時的引數(如果沒有設定過,則獲得的是預設值)
get_bar_code_result :獲得解碼後的結果,例如可以獲得條碼的型別(Code 128、Code 39等等)
get_bar_code_object :獲得解碼時的一些物件,例如可以獲得解碼後的條碼區域
三、提高解碼能力的其他措施
如果條碼影象預處理以後,仍舊解碼困難或者解位元速率不高,那麼可以通過以下措施進一步提高解碼能力:
1、如果整張圖資訊太多,則可以先把條碼區域挖出來,使用reduce_domain和crop_domain運算元,這樣不僅可以降低解碼難度,還可以減少解碼時間。也可使用decode_bar_code_rectangle2在指定的矩形區域內解碼。
2、可以嘗試把條碼影象轉正再解碼。(這種操作未經嚴格驗證,不知道是否可以有效提高解位元速率)
3、當條碼很密或者很小的時候,可以嘗試用zoom_image_factor放大了條碼影象。
4、find_bar_code中將“CodeType”設定為“auto”可以讀取多種型別的條碼,但是會增加執行時間,且可能會降低解碼的可靠性。最好只掃描預知的條形碼型別。
四、set_bar_code_param運算元的引數解析
'element_size_min' |
條碼的最小尺寸,指條碼寬度和間距,大碼應設大一點,減少處理時間 |
'element_size_max' |
條碼的最大尺寸,不能過小也不能過大 |
'check_char' |
是否驗證校驗位,'absent'不檢查校驗和,'present'檢查校驗和 |
'persistence' |
設定為1,可以通過get_barcode_result 獲取"quality_isoiec15416"或GetBarCodeObject with "scanlines_all" or "scanlines_valid"(掃碼線) |
'num_scanlines' |
解碼時所用掃描線的最大數目,設定為0表示自動確定,一般設定為2-30 |
"measure_size_variable“ |
當條碼有些變形設定這個值可以找到 |
'start_stop_tolerance' |
容許誤差值,可設定為'low'或者'high',設定為'high'可能造成誤判 |
'orientation'、'orientation_tol' |
分別指條碼的方向和方向容差,設定準確可大大提高解碼效率 |
'element_height_min' |
條碼的最小高度,預設值-1表示自動推測條碼高度,該引數對速度影響大 |
'stop_after_result_num' |
設定要解碼的個數,0表示全部找出,設定為2表示找到2個就不找了 |
'majority_voting' |
設定為false,預設只用中間那條掃描線,true就可以用大部分結果來評判,可以減少資料錯誤 |
'meas_thresh'和'meas_thresh_abs' |
表示掃描線測量閾值 |
'min_identical_scanlines' |
找到條碼最小需要多少掃描線 |
’num_scanlines' |
控制需要多少掃描線數 |
‘contrast_min' |
查詢掃碼區域的最小對比度 |
'check_char'