在halcon中二维码的识别与一维码类型,可以在识别前设置一些参数 和不同的码制。有什么码制和参数,大多时候都是按F1参阅手册便可,最主要的是如何用固有思路实现解码。
总的来说二维码的识别流程和一维码相似为:
1 创建 条码模型。2 设置条码参数。3 条码识别。4 识别结果显示。
下面实例 实现在不同光线下识别QR Code类型的二维码。
2.4 halcon 上位机实现不同光照下二维码的读取
- *首先创建一个条码句柄,然后就是从图片读取条码数据与显示。
- *要注意的是二维码使用标准的参数是不能够识别的。可能的原因有
- *对比度太底,二维码在黑色区域用白色打印,二维码太大,>48*48.二维码是通过点阵形式打印。
- *对于找不到的二维码,可以通过调节参数实现查找。
- dev_update_off ()
- dev_close_window ()
- ImageFiles := 'datacode/qrcode/qr_workpiece_'
- ImageNum := 9
- *读取图片保存到变量Image
- read_image (Image, ImageFiles + '01')
- 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')
- * 第一步创建QR Code类型二维码句柄,在后面使用。
- create_data_code_2d_model ('QR Code', [], [], DataCodeHandle)
- * 第二步从图片读取数据,这里循环加载不同图片,在这些图片上读取条码信息,并显示。
- for Index := 1 to ImageNum by 1
- read_image (Image, ImageFiles + Index.2d')
- *开始在图片上查找条码,Image为输入图片, SymbolXLDs为输出条码区域,亚像素单位,
- *DataCodeHandle, 为上面创建的二维码句柄,[], [], 为检测方式参数名与参数值,这里不需要留空。
- *ResultHandles为输出结果句柄, DecodedDataStrings为输出结果字符串。
- find_data_code_2d (Image, SymbolXLDs, DataCodeHandle, [], [], ResultHandles, DecodedDataStrings)
- dev_display (Image)
- dev_display (SymbolXLDs)
- disp_message (WindowHandle, 'Image ' + Index + ' of ' + ImageNum, 'window', 12, 12, 'black', 'true')
- 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
- *
- *查检图片是否加载完
- if (Index < ImageNum)
- disp_continue_message (WindowHandle, 'black', 'true')
- stop ()
- endif
- endfor
- *
- * 清理条码句柄,释放资源。
- clear_data_code_2d_model (DataCodeHandle)
复制代码
|