Halcon 一维码(条形码)

1. 一维码原理

1.1 定义:

人们用一些黑白相间的条纹构成的图案叫一维码,也叫条码。

1.2 作用:

它可以很方便的将一些信息,通过算法存储到图案中(编码)。

1.3 解码:

识别一维码,把信息通过算法解析出来。

1.4 原理:

二进制编码。

1.5 构成:

静区:起始码:资料码:校验区:终止码:

2. Halcon识别一维码

2.1 流程:

  • 创建条码模型:create_bar_code_model
  • 设置条码模型参数:set_bar_code_param
  • 条码查找解析:find_bar_code
  • 清除条码模型:clear_bar_code_model

2.2 获得中间结果的算子

  • 获得中间对象结果:get_bar_code_object
  • 获得条码模型参数:get_bar_code_param
  • 获得中间数据结果:get_bar_code_result

3. 难读取的一维码

3.1 产生原因:

  • 光照不理想
  • 条码本身存在残缺或干扰

3.2 方法1:预处理

  • 暗视野 scale_image
  • 亮视野 scale_image
  • 图像模糊: 增强 emphasize

3.3 方法2:设置参数

  • persistence:保留中间重要结果,当想要获得模型解码后的扫描线之前,此参数设为1。
  • majority_voting:多数表决,多条扫描线共同决定。
  • barcode_width_min:整个条码最小宽度,当条码像素大小比较固定时,设置此参数。
  • barcode_height_min:整个条码最小高度,当条码像素大小比较固定时,设置此参数。
  • element_size_min:条码模块的最小尺寸,模块是条码的基本单元。
  • element_size_max:条码模块的最大尺寸,当条码模块间隙比较小(在1-1.5像素)或比较大(大于8像素)时,考虑设置此参数。
  • contrast_min:当光照比较暗时,可以通过这个参数适当增加对比度。
  • element_size_variable:当条码模块变形扭曲时,此参数设置为true.此参数只针对三种码制:其他码需要自己做几何变换:获取码制函数 ==get_bar_code_result ==
    • GS1 DataBar Limited
    • GS1 DataBar Expanded
    • GS1 DataBar Expanded Stacked
  • stop_after_result_num:想找指定个数的条码时,设置此参数。
  • check_char:条当一维码存在校验符时,设置此参数。
  • min_code_length:最小字符长度。
  • num_scanlines:扫描线数量,设置为零是默认扫描线数,不同码制,默认扫描线数不同。当想指定扫描线数量时考虑此参数。
  • merge_scanlines:扫描线融合(只在高版本中才有)例子:defect_ean13,当条码有一部分被遮挡,考虑使用此参数。 扫描线相关参见例子:inspect_scanlines
  • meas_thresh_abs: meas_thresh:相对阈值和绝对阈值/当条码边缘比较明显,但是里面存在干扰噪声,可能存在假边,考虑使用此参数。
  • composite_cod:当你想解码复合码的时候,设置此参数
  • abort: 中断其他线程使用 find_bar_code
  • quiet_zone: 净空区验证,净空区有干扰时,考虑设置此参数。
  • start_stop_tolerance: 起始终止损坏容差,默认值是 high,设为low时性能下降,只适用于128码

4. 凹凸不平的条码(构建黑白相间的一维码)

  • 打光(同轴光)
    在这里插入图片描述
  • 算法
  • 三维设备 ==> 扫描出深度图(3D结构光,线激光)

5. 环形一维码

  • 将环形拉直(极坐标转换)在OCR中讲解

6. 圆柱面(难点)

6.1 360°镜头(德鸿)

  • 外壁镜头 => 极坐标转换
  • 内壁镜头 => 极坐标转换

6.2 线扫相机+转盘结构,

  • 让圆柱体转一圈

6.3 投影变换

  • 例子:grid_rectifiction
    1. 打印一张棋盘格(生成棋盘格文件算子:create_rectifiction_grid
    2. 将棋盘格贴到圆柱物体表面
    3. 使用函数:
      • 找到棋盘格的区域和图像:手动或者使用 find_rectifiction_grid
      • 棋盘格角点检测:
      • 角点是指局部灰度变化剧烈的地方。
      • 角点检测算子:saddle_points_sub_pix
      • 画出十字轮廓算子:gen_cross_contour_xld
      • 将角点连接成网格
        conne_grid_points
      • 产生投影map映射
        映射:gen_grid_rectifiction_map
        拉直:map_image
        使用映射识别二维码

7. 参数训练/模型读写/参数查询

  • 例子:barcode_training

7.1. 参数训练:

  • bar_code_training 自动确定最佳参数,但是也不能全信。
    • ‘train’
    • 'all’全部参数训练
    • 'element_min’之训练一个参数
    • '~all’取消训练
    • 注意:在训练模式下,码制不能写 ‘auto’,必须是具体码制。
    • 查询参数算子:query_bar_code_params

8. 其他码制

9. 补充参数

  • 角度 ‘orientation’
  • 角度公差 ‘orientation_tol’

10. Halcon一维码识别源代码下载地址:

链接:https://pan.baidu.com/s/1taJWdIw_og3-Gub6ngE3pg
提取码:uz9w

  • 2
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MechMaster

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值