文章目录

  • 前言
  • 一、实验原图
  • 二、实验思路
  • 三、halcon脚本实现
  • 四、效果图

前言

本文基于halcon实现条形码的识别,并且对识别器的一些参数进行设置


一、实验原图


二、实验思路

  • 首先获得halcon的条码识别器
  • 根据识别器里边获得条码的扫描线
  • 根据扫描线对附近区域扩大
  • 阈值获取条码位置

三、halcon脚本实现

这里上脚本,备注和逻辑在halcon脚本上做了注释

dev_get_window (WindowHandle)
dev_update_off ()
count_seconds (Start)
read_image (Image1, '1.bmp')
dev_set_draw ('margin')
dev_set_color ('red')
create_bar_code_model ([], [], BarCodeHandle)set_bar_code_param (BarCodeHandle, 'slanted', 'auto')
*识别条码只找一条,我们期望对每一个图像解码单个条形码
set_bar_code_param (BarCodeHandle, 'stop_after_result_num', 2)
*最小间隙
set_bar_code_param (BarCodeHandle, 'element_size_min', 1)
*条形码阅读器将使用不同的方法,在条码的'element_size_min'为1是很有用
set_bar_code_param (BarCodeHandle, 'meas_param_estimation', 'true')
*'present': 检查校验和,验证条码的正确性   'absent':不检查校验
set_bar_code_param (BarCodeHandle, 'check_char', 'present')
*设置条码候选区域的最小对比度
set_bar_code_param (BarCodeHandle, 'contrast_min', 0)
*表面的变形,为true条形码阅读器会尝试补偿这种扭曲,如贴在玻璃瓶
set_bar_code_param (BarCodeHandle, 'element_size_variable', 'true')
*当值为1的时候会保存读码的中间结果
set_bar_code_param (BarCodeHandle, 'persistence', 1)
*读取条码是否开启多数投票
set_bar_code_param (BarCodeHandle, 'majority_voting', 'true')
*使用值为大于0.0的'meas_thresh_abs',强制条形码阅读器仅使用扫描线的部分,具有至少该值的绝对对比度因此减少误报的数量。
set_bar_code_param (BarCodeHandle, 'meas_thresh_abs', 10.0)
*使用默认的扫描线数运行检测
set_bar_code_param (BarCodeHandle, 'num_scanlines', 0)
*用于测量扫描线内边缘位置的相对阈值
set_bar_code_param (BarCodeHandle, 'meas_thresh', 0.1)
* 有效的错误检测,因为错误来自单个假扫描线的检测结果
set_bar_code_param (BarCodeHandle, 'min_identical_scanlines', 0 + 1)
*容许误差值,可设置为'low'或者'high',设置为'high'可能造成误判
set_bar_code_param (BarCodeHandle, 'start_stop_tolerance', 'low')
*设置最小条形码高度或宽度并再次搜索条形码
*set_bar_code_param (BarCodeHandle, 'barcode_height_min', 600)
*set_bar_code_param (BarCodeHandle, 'barcode_width_min', 1600)*在矩形区域中读取条码
*draw_rectangle2 (3600, Row1, Column1, Phi1, Length1, Length2)
*decode_bar_code_rectangle2 (Image1, BarCodeHandle, 'Code 128', Row1, Column1, Phi1, Length1, Length2, DecodedDataStrings1)
*在图片中读取条码
find_bar_code (Image1, SymbolRegions, BarCodeHandle, 'auto', DecodedDataStrings)*获得所有提取条码的扫描线
*get_bar_code_object (BarCodeObjects, BarCodeHandle, 'all', 'candidate_regions')
*获得条码region区域,跟SymbolRegions一样
get_bar_code_object (SymbolRegion, BarCodeHandle, 'all', 'symbol_regions')
*获得条码字符串,跟DecodedDataStrings一样
get_bar_code_result (BarCodeHandle, 'all', 'decoded_strings', DecodedData)
*获得可识别条码的类型
get_param_info ('find_bar_code', 'CodeType', 'value_list', AllCodeTypes)
*获得条码XLD的轮廓角度
get_bar_code_result (BarCodeHandle, 'all', 'orientation', BarCodeResults)
*获得条码的类型
get_bar_code_result (BarCodeHandle, 'all', 'decoded_types', DecodedDataTypes)
*获得条码切割线的分割
get_bar_code_object (ValidScanlines, BarCodeHandle, 'all', 'scanlines_valid')
*检查扫描线OK  NG   ----->  ScanlinesAll 代表NG  ;ScanlinesValid代表OK
get_bar_code_object (ScanlinesAll, BarCodeHandle, 0, 'scanlines_all')
get_bar_code_object (ScanlinesValid, BarCodeHandle, 0, 'scanlines_valid')
*关于条码的完整参考数据
get_bar_code_result (BarCodeHandle, 0, 'decoded_reference', Reference)*显示条码的角度方向
area_center (SymbolRegions, Area, Row, Col)
gen_arrow_contour_xld (Arrow, Row + sin(rad(BarCodeResults)) * 70, Col - cos(rad(BarCodeResults)) * 70, Row - sin(rad(BarCodeResults)) * 70, Col + cos(rad(BarCodeResults)) * 70, 25, 25)
dev_display (Arrow)clear_bar_code_model (BarCodeHandle)*等待0.5s
wait_seconds(0.5)disp_obj (Image1, WindowHandle)
if(|Area| > 0)dilation_circle (SymbolRegions, RegionDilation, 150)count_obj (RegionDilation, Number)for Index := 1 to 2 by 1select_obj (RegionDilation, RegionDilation_each, Index)reduce_domain (Image1, RegionDilation_each, ImageReduced)median_image (ImageReduced, ImageMedian1, 'circle', 1, 'mirrored')threshold (ImageMedian1, Region, 71, 223)closing_rectangle1 (Region, RegionClosing, 20, 20)threshold (ImageMedian1, Regions, 137, 147)opening_rectangle1 (RegionClosing, RegionOpening1, 20, 20)connection (RegionOpening1, ConnectedRegions1)select_shape (ConnectedRegions1, SelectedRegions, 'area', 'and', 20000, 100000)shape_trans (SelectedRegions, RegionTrans, 'rectangle2')set_color (WindowHandle, 'green')disp_region (RegionTrans, WindowHandle)area_center (RegionTrans, Area, Row, Col)orientation_region (RegionTrans, Phi)gen_arrow_contour_xld (Arrow, Row + sin(Phi) * 70, Col - cos(Phi) * 70, Row - sin(Phi) * 70, Col + cos(Phi) * 70, 25, 25)set_color (WindowHandle, 'red')dev_display (Arrow)endfor
endif
dev_update_on ()

四、效果图


halcon脚本-条形码识别【附源码】相关推荐

  1. 简单实现 Android M 指纹识别(附源码)

    众所周知, Android阵营里的指纹兼容真可谓是一团糟, 每个厂家几乎都有一套自己的API, 直到Android M的出现, 才慢慢地走上正途. 那么今天我们就一起来探讨一下, Android M里 ...

  2. OpenCV+TensorFlow图片手写数字识别(附源码)

    初次接触TensorFlow,而手写数字训练识别是其最基本的入门教程,网上关于训练的教程很多,但是模型的测试大多都是官方提供的一些素材,能不能自己随便写一串数字让机器识别出来呢?纸上得来终觉浅,带着这 ...

  3. python + mitmproxy 脚本大全(附源码+实例)

    From:https://blog.wolfogre.com/posts/usage-of-mitmproxy             http://www.cnblogs.com/grandlulu ...

  4. 用python爬小说_今天分享一个用Python来爬取小说的小脚本!(附源码)

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 以下文章天气预报数据分析与统计之美 ,作者:❦大头雪糕❦ Python GUI制作小说下载器教学讲 ...

  5. python爬取天气预报数据并保存为txt格式_今天分享一个用Python来爬取小说的小脚本!(附源码)...

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 以下文章天气预报数据分析与统计之美 ,作者:❦大头雪糕❦ Python GUI制作小说下载器教学讲 ...

  6. 今天分享一个用Python来爬取小说的小脚本!(附源码)

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 以下文章来源于大邓和他的Python ,作者:大邓 Python爬取知乎数据案例讲解视频 http ...

  7. 迁移学习人民币面值识别(附源码)-InceptionResNetV2

    向AI转型的程序员都关注了这个号

  8. 用python写的登录界面的脚本_记录 制作校园网登陆脚本 python编写 附源码

    5 importos6 importre7 8 classAOA(object):9 #获取本机IP 10 defget_ip(self):11 try:12 s =socket.socket(soc ...

  9. 人脸检测MTCNN和人脸识别Facenet(附源码)

    原文链接:人脸检测MTCNN和人脸识别Facenet(附源码) 在说到人脸检测我们首先会想到利用Harr特征提取和Adaboost分类器进行人脸检测(有兴趣的可以去一看这篇博客第九节.人脸检测之Haa ...

最新文章

  1. Docker搭建网页数据库管理-Adminer
  2. NTU 课程辅助笔记: NFA到DFA的转化
  3. Andriod --- JetPack (三):ViewModel 的诞生
  4. 封神-核心功能 | 钉钉告警+数据网关
  5. Java EE WEB工程师培训-JDBC+Servlet+JSP整合开发之12.Servlet基础(2)
  6. 软件工程——认识方法、模型、工具和技术
  7. 暴跌1300亿,机械茅也扛不住了
  8. 羊毛党新欢、淘宝女孩落泪,1688出圈真相
  9. django-rest-framework二--权限(转载)
  10. 软件测试的错误优先级,软件测试典型错误
  11. Python数学建模 缺失值与异常值处理
  12. 基于51单片机步进电机控制
  13. linux给文件夹图标,Linux 如何在启动器中自定义图标
  14. java实现京东登陆界面,京东登陆界面的实现
  15. 学习日志——2019/07/04
  16. 【时间之外】面向监狱的编程?该学学网络安全法了(2)
  17. 企业微信支付功能怎么开通?
  18. ue4 开发动作游戏_ue4游戏开发虚幻4学习教程资源素材合集
  19. [.NET基础]走进各种位运算
  20. 线程间操作无效: 从不是创建控件的线程访问它。

热门文章

  1. win2003遭受udp攻击导致带宽占用很大
  2. 对人的外部评价与内部评价
  3. AR说 | AR美妆,在化妆品店内扮演着什么角色?
  4. 阐述HTML语言的基本语法规则,信息组织学》考试试卷(A)试卷(一)
  5. 刘克亚十二条营销铁律
  6. Ubuntu连接手机adb调试
  7. data=*(vu32*)addr;的理解?
  8. AppleXml.Framework(02)-通过框架搭建Demo环境
  9. BMI(体重指数)计算C语言
  10. Android混淆、反编译基础教程