Halcon下二維碼識別與聯合C#編程

前面寫到過用開源庫ZXing做二維碼的識別與生成,今天以Halcon做一個簡單的二維碼識別程序,並聯合C#進行編程。

Halcon下二維碼識別比較簡單,主要分為兩個步驟;

第一步:創建二維數據代碼類的二維數據代碼模型,並返回一個句柄。用到的算子:create_data_code_2d_model (Operator),

算子參數:

1、SymbolType:二維條碼的類型,默認值是:Data Matrix ECC 200;可選值有( 'Aztec Code', 'Data Matrix ECC 200', 'GS1 Aztec Code', 'GS1 DataMatrix', 'GS1 QR Code', 'Micro QR Code', 'PDF417', 'QR Code'),我們此次識別QR二維碼,選擇值:'QR Code';

2、GenParamName:可以為二維數據代碼模型調整的通用參數的名稱。這裡選'default_parameters';

3、GenParamVlue:可以為二維數據代碼模型調整的通用參數的值,這裡選'enhanced_recognition'增強識別;

4、DataCodeHandle:用於使用和訪問二維數據代碼模型的句柄;下一步識別讀取信息時使用;

第二步:搜索並讀取圖像中的二維碼,用到的算子:find_data_code_2d(Operator)

算子參數:

1、Image:要識別的二維碼圖像。

2、SymbolXLDs:圍繞成功解碼的數據代碼符號的XLD輪廓。輪廓點的順序反映了檢測到的符號的方向。輪廓從左上角開始並順時針繼續,如下圖:

Halcon下二維碼識別與聯合C#編程

3、DataCodeHandle:用於使用和訪問二維數據代碼模型的句柄;

4、GenParamName:用於控制運算符行為的(可選)參數的名稱;此處應用Default value: []

5、GenParamValue:可選泛型參數的值;此處應用Default value: []

6、ResultHandles:所有成功解碼的二維數據代碼符號的句柄;

7、DecodedDataStrings:解析到的二維碼信息。

實際應用:識別下面的圖片中二維碼:

Halcon下二維碼識別與聯合C#編程

1、Halcon代碼如下:

<code>dev_update_off ()
dev_close_window ()
*讀取一張圖片,並打開一個窗口,將窗口大小設置成適合此圖片大小
read_image (Image, '二維碼圖片文件位置')
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
dev_set_line_width (3)
dev_set_color ('green')
disp_continue_message (WindowHandle, 'black', 'true')
* 
* 步驟1:創建數據代碼模型
* ----------------------------------------------------
* 創建二維數據代碼類的二維數據代碼模型
* 創建二維數據代碼類“二維碼”的二維數據代碼模型。
* 運算符返回二維數據代碼模型的句柄,該句柄可用於對數據代碼的所有後續操作。
create_data_code_2d_model ('QR Code', 'default_parameters', 'enhanced_recognition', DataCodeHandle)
* 
* 步驟二: 讀取二維碼數據
* ----------------------------------------------------
* 搜索並讀取圖像中的二維碼,並顯示找到的二維碼信息
read_image (Image, '二維碼圖片文件位置')
find_data_code_2d (Image, SymbolXLDs, DataCodeHandle, [], [], ResultHandles, DecodedDataStrings)
* 
* 顯示結果
dev_display (Image)
dev_display (SymbolXLDs)    
disp_message (WindowHandle, DecodedDataStrings, 'window', 40, 12, 'black', 'true')
Message := 'No data code found.'
Message[1] := 'The symbol could not be found with the standard'
Message[2] := 'default setting. Please adjust the model parameters'
Message[3] := 'to read this symbol.'
* 如果沒有發現二維碼時顯示提示
if (|DecodedDataStrings| == 0)
   disp_message (WindowHandle, Message, 'window', 40, 12, 'red', 'true')
Endif/<code>

2、Halcon聯合C#編程,效果如下:

Halcon下二維碼識別與聯合C#編程

3、完整代碼已上傳,關注後私信回覆:“Halcon二維碼”獲取,感謝您的閱讀和關注;


分享到:


相關文章: