Halcon 一维码(条形码)
目录
- 1. 一维码原理
- 1.1 定义:
- 1.2 作用:
- 1.3 解码:
- 1.4 原理:
- 1.5 构成:
- 2. Halcon识别一维码
- 2.1 流程:
- 2.2 获得中间结果的算子
- 3. 难读取的一维码
- 3.1 产生原因:
- 3.2 方法1:预处理
- 3.3 方法2:设置参数
- 4. 凹凸不平的条码(构建黑白相间的一维码)
- 5. 环形一维码
- 6. 圆柱面(难点)
- 6.1 360°镜头(德鸿)
- 6.2 线扫相机+转盘结构,
- 6.3 投影变换
- 7. 参数训练/模型读写/参数查询
- 7.1. 参数训练:
- 8. 其他码制
- 9. 补充参数
- 10. 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
- 打印一张棋盘格(生成棋盘格文件算子:create_rectifiction_grid)
- 将棋盘格贴到圆柱物体表面
- 使用函数:
- 找到棋盘格的区域和图像:手动或者使用 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
Halcon 一维码(条形码)相关推荐
- halcon一维码识别
halcon一维码识别 1.创建模板 create_bar_code_model (GenParamName, GenParamValue, BarCodeHandle) GenParamName 可 ...
- Halcon一维码和二维码识别
Halcon一维码和二维码识别 一.Halcon一维码识别 二.Halcon二维码识别 一.Halcon一维码识别 1.一维码的识别过程: (1).创建条码模型create_bar_code_mode ...
- Halcon一维码识别实例
目录 一维码识别算子 1.创建条形码阅读器模型 2.设置参数 3.检测和读取图像中的条形码符号 4.获取参数 (1)获取一个或多个描述条码模型的参数 (2)访问在条码符号搜索或解码过程中创建的标志性对 ...
- 使用OpenCV+Zbar一维码(条形码)识别
1. 工具 opencv4.5.1 + Zbar库. opencv4集成了二维码检测,但没条形码检测,这里用常规zbar库进行识别. zbar库的下载与安装: 首先配置zbar库: Zbar安装包下载 ...
- Halcon 一维码识别
一.图像预处理和条码增强 对比度太低:scale_image(或使用外部程序scale_image_range),增强图像的对比度. 图像模糊:emphasize锐化图像,使条码看起来更清晰. 深色背 ...
- halcon 一维码读取
*创建条码读取模版 create_bar_code_model ([], [], BarCodeHandle)*成功解码到一个条形码后将解码停止 set_bar_code_param (BarCode ...
- Halcon解决方案指南(16)一维码识别
第16章 一维码识别_BarCode create_bar_code_model创建条形码模型.返回的句柄提供有关条形码结构的所有必要信息. find_bar_code读取条形码.可以指定要搜索的模型 ...
- Halcon图像的一维码二维码识别
7.1识别一维码的流程和方法 一维码的码制: 一维条码即指条码条和空的排列规则,常用的一维码的码制包括:EAN 码.39 码. 交叉 25 码.UPC 码.128 码.93 码,ISBN 码,及 Co ...
- halcon的一维码与二维码的识别
一维码.二维码在生活中经常看到,如下图: 现在就开始用halcon做个实时采集识别吧! 一维码识别 点击助手打开新的Image Acquisition,然后检查相机连接设备和设置参数后插入代码,代码如 ...
最新文章
- Python之面向对象进阶
- mysql分库分表风险_数据库分库分表存在的问题及解决方案
- linux多个客户端如何通信_linux实现多个客户端通信进阶
- [数据库] Navicat for Oracle基本用法图文介绍
- SQL Server 索引结构及其使用(一)
- ssh连接+执行系统命令
- AJAX与SQL Server(一)
- P4593-[TJOI2018]教科书般的亵渎【拉格朗日差值】
- 如何以大数据的JAX-RS响应的形式将JPA结果流化/序列化
- vector和list容器有哪些区别
- SPI驱动0.96/1.3寸 OLED屏幕,易修改为DMA控制
- Vector的使用详解
- python使用spark-sql读取数据并可视化_使用Spark SQL读取HBase上的数据
- keepalived vip mysql_mysql+keepalived高可用集群
- linux yum被占用
- linux系统可以在移动硬盘,如何在移动硬盘上装LINUX系统?
- PIXI.JS一镜到底动画
- RN + Flutter
- 41家大公司年度福利比较 大公司福利档案揭秘
- uniapp——uni-admin后台管理系统(使用uniCloud免费云服务器)