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

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.dtcms.com/a/348909.html

相关文章:

  • 普元低代码开发平台:开启企业高效创新新征程
  • 刷题日记0824
  • 【AI论文】实习生-S1:一种科学多模态基础模型
  • 0824 MLIR和AST相关资料
  • 复杂工业场景识别率↑18.3%!陌讯多模态OCR算法实战解析
  • 虚幻引擎5(UE5)Android端游戏开发全流程指南:从环境配置到项目发布
  • Qt工具栏中图标槽函数没有响应的问题分析
  • 【JVM内存结构系列】三、堆内存深度解析:Java对象的“生存主场”
  • 【数据分享】地级市能源利用效率(超效率SBM、超效率CCR)(2006-2023)
  • Vue中 this.$emit() 方法详解, 帮助子组件向父组件传递事件
  • 纯血鸿蒙下的webdav库
  • vue中 computed vs methods
  • 【C++闯关笔记】STL:string的学习和使用(万字精讲)
  • 开发软件安装记录
  • Kubernetes v1.34 前瞻:资源管理、安全与可观测性的全面进化
  • golang6 条件循环
  • R语言rbind()和cbind()使用
  • 信贷策略域——信贷产品策略设计
  • 【数据结构】排序算法全解析
  • 【链表 - LeetCode】206. 反转链表【带ACM调试】
  • HTTP URL 详解:互联网资源的精准地址
  • 当AI遇上终端:Gemini CLI的技术魔法与架构奥秘
  • 在 vue3 和 vue2 中,computed 计算属性和 methods 方法区别是什么
  • 打响“A+H”双重上市突围战,云天励飞实力如何?
  • JUC并发编程07 - wait-ify/park-un/安全分析
  • 《CF1120D Power Tree》
  • Spirng Cloud Alibaba主流组件
  • 【ElasticSearch】springboot整合es案例
  • 企业出海第一步:国际化和本地化
  • springBoot如何加载类(以atomikos框架中的事务类为例)