当前位置: 首页 > ops >正文

halcon(一)一维码解码

(1)解码流程

1)创建条形码模板

create_bar_code_model()

2)设置条形码模型参数

set_bar_code_param()(获取条形码模型参数 )

3)检测和读取图像中的条形码符号

find_bar_code()

4) 获取解读条形码标志时计算得到的结果

get_bar_code_result()

get_bar_code_object()(访问在搜索或解码过程中创建的图标对象)

5) 清除解码模型

clear_bar_code_model()

(2)一些参数配置

参考  【Halcon学习笔记】11.一维条形码检测 - 哔哩哔哩

check_char:是否设置校验符

          absent:不检查检验码,所有字符都作为数据返回                       

          present:检查检验码,并用于验证条形码的正确性,如果校验和不匹配,则不返回条码结果

          preserved:允许验证条形码,同时仍将校验字符保留在数据中

majority_voting:解码时是否分析多条扫描线(为了减少错误解码结果,应该启用该参数) 

           false:如果找到最小数目的相同解码扫描线,则返回一个成功的解码结果  

           true:在不同的扫描线结果之间进行选择

persistence:是否在解码期间存储一些中间结果(想查看解码扫描线时需要存储中间结果)

                       0:不存储

                       1:存储

min_identical_scanlines:解码时扫描线的最小数目

contrast_min:条码元素的前景和背景之间的最小对比度(设置最小对比度可再一定程度提高后续检测时间)  

meas_param_estimation:增加元素尺寸非常小的条形码的读取性能(条码较小时设置为true可以提高读取性能)   

element_size_variable:补偿条形码失真(当条码有变形时设置为true可以再一定程度去补偿失真)

meas_thresh:相对于扫描线像素的动态范围的相对值

meas_thresh_abs:相对于扫描线像素的动态范围的绝对值(对比度)

num_scanlines:解码时所用扫描线的最大数目,设置为0表示自动确定,一般设置为2-30      

2)get_bar_code_object()(访问在搜索或解码过程中创建的图标对象)

        BarCodeObjects:在条码检测或评估期间作为中间结果创建的对象         BarCodeHandle:条码模型的句柄         CandidateHandle:分别指示需要数据的条码结果候选         ObjectName:要返回的标志性对象的名称                 candidate_regions:返回潜在条形码的区域(可能是条形码的区域)

      scanlines_all:返回所有扫描线的 XLD 轮廓(包括潜在条形码区域)

      scanlines_all_plain:返回所有扫描线的 XLD 轮廓(包括潜在条形码区域)

      scanlines_merged_edges:返回表示应用于候选区域的扫描线中特定检测到的条的 XLD 轮廓  

      scanlines_valid:返回特定检测到条形码扫描线的 XLD 轮廓

      scanlines_valid_plain:返回特定检测到条形码扫描线的 XLD 轮廓

       symbol_regions:返回成功解码符号的区域

复制 【Halcon学习笔记】11.一维条形码检测 - 哔哩哔哩

create_bar_code_model([],[],BarCodeHandle)read_image(Image, 'barcode/25industrial/25industrial0' + 1)
set_bar_code_param(BarCodeHandle, 'element_size_min', 8)
get_bar_code_param(BarCodeHandle, 'element_size_min', GenParamValue)
set_bar_code_param (BarCodeHandle, 'persistence', 1)set_bar_code_param (BarCodeHandle, 'check_char', 'present')dev_set_color ('green')
IsFindRectangle := falsedev_get_window(windHandle)
if(IsFindRectangle = true)draw_rectangle2(windHandle, Row1, Column1, Row2, Column2,phi)decode_bar_code_rectangle2(Image, BarCodeHandle, 'auto', Row1, Column1, Row2, Column2,phi, DecodedDataStrings)
elsefind_bar_code(Image, SymbolRegions, BarCodeHandle, 'auto', DecodedDataStrings)
endifget_bar_code_result(BarCodeHandle, 'all', 'decoded_types', BarCodeResults)
get_bar_code_object(BarCodeObjects, BarCodeHandle, 'all', 'candidate_regions')gen_contour_region_xld(BarCodeObjects,Contours, 'border')
count_obj (BarCodeObjects, NumberCandidates)
if (NumberCandidates == 0)disp_message (windHandle, 'No candidates found', 'window', 32, 12, 'red', 'true')
elsedev_set_color ('magenta')dev_display (BarCodeObjects)disp_message (windHandle, 'Candidates: ' + NumberCandidates, 'window', 52, 12, 'magenta', 'true')
endif
return ()dev_set_color ('magenta')
disp_message(windHandle, DecodedDataStrings, 'window', 10, 10, 'red', 'false')get_bar_code_object (AllScanlines, BarCodeHandle, 'all', 'scanlines_all')dev_set_color ('red')dev_display (AllScanlines)clear_bar_code_model(BarCodeHandle)

问题查找方法:

参考 https://zhuanlan.zhihu.com/p/647610843

1)查看识别区域是否争取

     查看halcon识别出来的条形码区域是否正确。

2)绘制出来多个扫描线

      查看扫描线提取是否正确

详细代码请查看 https://zhuanlan.zhihu.com/p/647610843

http://www.xdnf.cn/news/18613.html

相关文章:

  • 目标检测数据集 第007期-基于yolo标注格式的茶叶病害检测数据集(含免费分享)
  • MATLAB 入门:从变量定义到基础绘图的完整上手指南
  • 05-ArkUI界面开发
  • 前端漏洞(上)- CSRF漏洞
  • C++ Core Guidelines: 最佳实践与深入解析
  • .net9 解析 jwt 详解
  • Go语言 Hello World 实例
  • RabbitMQ--消费端异常处理与 Spring Retry
  • 2025最新ncm转MP3,网易云ncm转mp3格式,ncm转mp3工具!
  • ThinkPHP8学习篇(四):请求和响应
  • VSCode无权访问扩展市场
  • 【数据结构】-5- 顺序表 (下)
  • 【JavaEE】了解synchronized
  • Java 基础学习总结(211)—— Apache Commons ValidationUtils:让参数校验从 “体力活“ 变 “优雅事“
  • 电动车运行原理与最新人工智能驾驶技术在电动车上的应用展望:从基础动力系统到L5级完全自动驾驶的技术深度解析
  • 大语言模型的自动驾驶 LMDrive/DriveVLM-Dual
  • Kubernetes部署Prometheus+Grafana 监控系统NFS存储方案
  • Spark04-MLib library01-机器学习的介绍
  • Spring创建的方式
  • 在 Ubuntu 24.04 或 22.04 LTS 服务器上安装、配置和使用 Fail2ban
  • 【LLM】DeepSeek-V3.1-Think模型相关细节
  • Android - 用Scrcpy 将手机投屏到Windows电脑上
  • MySQL学习记录-基础知识及SQL语句
  • SSRF的学习笔记
  • React useState 全面深入解析
  • 6.2 el-menu
  • Axure RP 9的安装
  • 如何让FastAPI在百万级任务处理中依然游刃有余?
  • Postman参数类型、功能、用途及 后端接口接收详解【接口调试工具】
  • 【C++】函数返回方式详解:传值、传引用与传地址