【Halcon學習筆記】11.一維條形碼檢測
1.概述
????????條形碼是由一組規(guī)則排列的條,空以及對應的字符組成的標記,“條”指的對光線反射率較低的部分,“空”指對光線反射率高的部分,這些條和空組成的數(shù)據(jù)可以表達一定的信息,能夠用特定的設備識別讀取,并轉換成與計算機兼容的二進制/十進制信息。
????????條形碼主要分為一維條形碼和二維條形碼。一維條形碼只在水平方向表達信息,而在豎直方向不表達任何信息,其高度通常是為了便于閱讀器對準。

1.1 一維碼分類
????????現(xiàn)普遍使用的一維條形碼有國際物品條形碼(EAN)、產品通用條形碼(UPC)、25條形碼、39條形碼、庫得巴條形碼,這些條形碼的功能不用,分別適用于不同領域。

1.2 一維碼結構
????????以EAN-13條形碼為例,該條形碼主要由左側空白區(qū)、起始符、左側數(shù)據(jù)符、中間分隔符、右側數(shù)據(jù)符、校驗符、終止符、右側空白區(qū)等組成。

2.相關算子
2.1 創(chuàng)建(創(chuàng)建一維維條形碼閱讀器的模型)
1)create_bar_code_model() ? ?
????????GenParamNames:可選參數(shù)名稱 ? ?
????????GenParamValues:可選參數(shù)設置值 ? ?
????????BarCodeHandle:條形碼模板句柄
2.2 設置/獲取
1)get_bar_code_param()(設置條形碼模型參數(shù)?)
2)set_bar_code_param()(獲取條形碼模型參數(shù)?)
????????BarCodeHandle:條形碼模板句柄
????????GenParamNames:可選參數(shù)名稱 ? ? ? ?
? ? ? ? ? ? ? ? check_char:是否設置校驗符
? ? ? ? ? ? ? ??????????absent:不檢查檢驗碼,所有字符都作為數(shù)據(jù)返回? ? ? ? ?? ? ? ? ? ? ??
? ? ? ? ? ? ? ??????????present:檢查檢驗碼,并用于驗證條形碼的正確性,如果校驗和不匹配,則不返回條碼結果
? ? ? ? ? ? ? ??????????preserved:允許驗證條形碼,同時仍將校驗字符保留在數(shù)據(jù)中
? ? ? ? ? ? ? ? majority_voting:解碼時是否分析多條掃描線(為了減少錯誤解碼結果,應該啟用該參數(shù))?
? ? ? ? ? ? ? ??????????false:如果找到最小數(shù)目的相同解碼掃描線,則返回一個成功的解碼結果??
? ? ? ? ? ? ? ??????????true:在不同的掃描線結果之間進行選擇
? ? ? ? ? ? ? ? persistence:是否在解碼期間存儲一些中間結果(獲取解碼掃描線時需要存儲中間結果)
? ? ? ? ? ? ? ??? ? ? ?0:不存儲
? ? ? ? ? ? ? ??? ? ? ?1:存儲
? ? ? ? ? ? ? ? min_identical_scanlines:解碼時掃描線的最小數(shù)目
? ? ? ? ? ? ? ? contrast_min:條碼元素的前景和背景之間的最小對比度(設置最小對比度可再一定程度提高后續(xù)檢測時間)??
????????????????meas_param_estimation:增加元素尺寸非常小的條形碼的讀取性能(條碼較小時設置為true可以提高讀取性能)? ?
? ? ? ? ? ? ? ? element_size_variable:補償條形碼失真(當條碼有變形時設置為true可以再一定程度去補償失真)
? ? ? ? ? ? ? ? meas_thresh:相對于掃描線像素的動態(tài)范圍的相對值
? ? ? ? ? ? ? ? meas_thresh_abs:相對于掃描線像素的動態(tài)范圍的絕對值(對比度)
????????????????num_scanlines:解碼時所用掃描線的最大數(shù)目,設置為0表示自動確定,一般設置為2-30? ? ??
????????????...
????????GenParamValues:可選參數(shù)設置值
2.3 檢測(檢測和讀取圖像中的條形碼符號)
1)find_bar_code()
????????Image:待處理的圖片
????????SymbolRegions:成功解碼的條碼符號的區(qū)域
????????BarCodeHandle:條碼模型的句柄
????????CodeType:條碼類型
? ? ? ?
????????????????auto(不清楚待檢測的條碼類型時)
????????????????EAN-13
? ? ? ?
????????????????Code 39
????????????...
????????DecodedDataStrings:解碼的數(shù)據(jù)字符串
2.4 獲取
1)get_bar_code_result()
(獲取解讀條形碼標志時計算得到的結果)???????
????????BarCodeHandle:條碼模型的句柄
????????CandidateHandle:分別指示需要數(shù)據(jù)的條碼結果候選
? ?
????????ResultName:結果名稱
? ? ? ?
? ? ? ? ? ? ? ? decoded_types:條碼類型? ? ?? ?
????????????????decoded_strings:條碼字符串
? ? ? ? ? ? ? ? element_size:元素大小? ? ????
????????????????orientation:方向 ??? ? ???
????????????????decoded_data:解碼數(shù)據(jù)? ?? ? ??
????????????????decoded_reference:解碼參考? ? ??? ?
????????????????composite_strings:復合字符串? ?? ? ??
????????????????composite_reference:符合參考? ? ?? ??
????????????????aborted:是否被終止? ? ? ???
????????????...
????????BarCodeResults:結果值
2)get_bar_code_object()(訪問在搜索或解碼過程中創(chuàng)建的圖標對象)
????????BarCodeObjects:在條碼檢測或評估期間作為中間結果創(chuàng)建的對象
????????BarCodeHandle:條碼模型的句柄
????????CandidateHandle:分別指示需要數(shù)據(jù)的條碼結果候選
????????ObjectName:要返回的標志性對象的名稱
????????????????candidate_regions:返回潛在條形碼的區(qū)域(可能是條形碼的區(qū)域)
????????????????scanlines_all:返回所有掃描線的 XLD 輪廓(包括潛在條形碼區(qū)域)
? ? ????????????scanlines_all_plain:返回所有掃描線的 XLD 輪廓(包括潛在條形碼區(qū)域)
? ? ????????????scanlines_merged_edges:返回表示應用于候選區(qū)域的掃描線中特定檢測到的條的 XLD 輪廓??
? ? ????????????scanlines_valid:返回特定檢測到條形碼掃描線的 XLD 輪廓
? ? ????????????scanlines_valid_plain:返回特定檢測到條形碼掃描線的 XLD 輪廓
? ? ????????????symbol_regions:返回成功解碼符號的區(qū)域
2.5 釋放(釋放條形碼閱讀器的模型)
?1)clear_bar_code_model()
????????BarCodeHandle:條形碼模板句柄
3.一維碼檢測在Halcon中的應用步驟?
1)創(chuàng)建條形碼模板
2)設置條形碼模型參數(shù)
3)檢測和讀取圖像中的條形碼符號
4)?獲取解讀條形碼標志時計算得到的結果




-by Ryou2