文章目录

  • 前言
  • 一、实验原图
  • 二、实验思路
  • 三、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. 学术期刊因投稿者并非双一流高校作者而拒稿引热议!这算学历歧视吗?
  2. 多个相机拍摄定位_两种方式拍照易泄露隐私 | 如何避免照片记录 iPhone 定位信息?...
  3. 绿标2.0隐私权限解读——应用分类及对应权限展示
  4. jquery效果案例学习站
  5. mysql2005错误_sql-server-2005 – SQL Server 2005错误701 – 内存不足
  6. Java面向对象基础整理
  7. ASCII+Unicode+UTF8(字符编码方式-字节) Base64(字节编码方式-64字符)
  8. c语言找到串口,再次熟悉串口
  9. AMD如何争夺Intel市场份额?血拼高配PC装机量
  10. php 各种进制表示,常用的进制有哪些
  11. zabbix中mysql连不上的排错_zabbix使用排错 - oschina130111的个人空间 - OSCHINA - 中文开源技术交流社区...
  12. 二十天一学通C#:.NET中文件和文件夹的类
  13. Android WebView使用详解
  14. 生活不止有诗和远方,也有眼前的美好。也许你心里有清风明月,
  15. IE8补充前后缀快捷键
  16. C语言--[Error] stray '\237' in program--解决方案。
  17. Java版本企业招投标采购管理系统源码 一站式全流程采购招标系统
  18. 互联网之父Vint Cerf确诊肺炎,曾获图灵奖和总统自由勋章
  19. (转) 如何在Excel和Word文档中插入GIF动画
  20. 正则表达式 学习笔记

热门文章

  1. 杰理6905A更改蓝牙名字
  2. 计蒜客-1891-砍树(二分)
  3. 网络请求urllib库使用总结
  4. 借助近距离通信,实现手机作为游戏控制器掌控大屏游戏
  5. Oracle 12c 的 hr_main.sql
  6. 2016中国联通电信4K智能机顶盒白皮书
  7. html5 拉窗帘 效果,jQuery和CSS3超酷3D拉窗帘式滚动导航特效
  8. C语言中最难啃的硬骨头非这三个莫属
  9. AEDA: An Easier Data Augmentation Technique for Text Classification
  10. 软件产品发布基本流程