近期要往一个大型软件里面增加一个扫码工具,想到基于halcon算子进行开发,记录一下开发过程中的采坑和要点。

        刚开始拿到现场的二维码数据集,基于halcon进行测试,发现根本识别不了,无法有效获得二维码信息。基于halcon识别二维码的核心算子为下面两个:

create_data_code_2d_model ('Data Matrix ECC 200', 'default_parameters','enhanced_recognition', Handle)
find_data_code_2d (Image2, QRXLDs, QRHandle, 'stop_after_result_num', 4, ResultHandles, PositionStrings)

在这里卡住了很久,对创建的识别二维码的模型设置各类参数,也无法有效识别,对halcon二维码的识别一度产生怀疑。

后来,在想是不是需要对图片加一些预处理,调整带有二维码图片的灰度分布,再来识别,把同事加预处理识别二维码程序搞过来了,如下:

    read_image (Image, ImageFiles[Index])dev_close_window ()dev_open_window (0, 0, 800, 600, 'black', WindowHandle)rgb1_to_gray (Image, GrayImage) create_data_code_2d_model ('Data Matrix ECC 200', 'default_parameters', 'enhanced_recognition', QRHandle)*******************识别出二维码Length := 0PositionStrings := []for min_gray := 0 to 30 by 3for max_gray := 255 to 180 by -7*灰度线性映射Mult:=255.0/(max_gray-min_gray)Add:=-Mult*min_grayscale_image (GrayImage, Image2, Mult, Add)find_data_code_2d (Image2, QRXLDs, QRHandle, 'stop_after_result_num', 4, ResultHandles, PositionStrings)tuple_strlen (PositionStrings, Length)*字符串大于5就是识别出来了if (Length > 5)breakendif       endforif (Length > 5)breakendif endfor********释放内存clear_data_code_2d_model(QRHandle)

终于可以识别部分二维码图片,但也是只针对小部分图片,大部分图片无法有效识别。

但到这里,还是看到了识别的希望,接下来放大招,能够稳定有效地识别图片中的二维码,先说下识别思路。

对图片进行通道分解,基于RGB和HSV通道分解得到六个通道的图片,基于这六张图片进行二维码识别,测试结果表明基于S通道的图片二维码识别,在图片保证清晰的情况下,识别率将近99%以上。以下是halcon代码:

read_image (Image, ImageFiles[Index])*分解图片为三通道decompose3 (Image, ImageR, ImageG, ImageB)*分解成HSV通道trans_from_rgb (ImageR, ImageG, ImageB, ImageH, ImageS, ImageV, 'hsv')rgb1_to_gray (Image, GrayImage)get_image_size (GrayImage, Width, Height)dev_open_window (0, 0, 800, 600, 'black', WindowHandle)InputImage:=Imagecreate_data_code_2d_model ('Data Matrix ECC 200', 'default_parameters', 'enhanced_recognition', DataCodeHandle)set_data_code_2d_param (DataCodeHandle, 'polarity', 'dark_on_light')set_data_code_2d_param (DataCodeHandle, 'symbol_shape', 'rectangle')*set_data_code_2d_param (DataCodeHandle, 'timeout', delayTime)*set_data_code_2d_param (DataCodeHandle, 'symbol_size_min', minSize)*set_data_code_2d_param (DataCodeHandle, 'symbol_size_max', maxSize)*set_data_code_2d_param (DataCodeHandle, 'mirrored', 'no')*set_data_code_2d_param (DataCodeHandle, 'contrast_min', minContrast)*开始找码find_data_code_2d (ImageS, SymbolXLDs, DataCodeHandle, 'stop_after_result_num', 4, ResultHandles, DecodedDataStrings)disp_message (WindowHandle, '识别结果:'+DecodedDataStrings, 'window', 20, 20, 'red', 'true')clear_data_code_2d_model (DataCodeHandle)

Halcon二维码扫描算法总结相关推荐

  1. 【halcon 线扫相机二维码矫正算法】

    halcon 线扫相机畸变二维码矫正算法 线扫相机拍照畸变 1.二维码定位与裁剪 图像矫正 运行结果 总结 线扫相机拍照畸变 线扫相机拍摄图片分辨率较高,但是由于相机本身或者或者拍照目标的运动,容易造 ...

  2. 二维码扫描开源库ZXing定制化【转】

    转自:http://www.cnblogs.com/sickworm/p/4562081.html 最近在用ZXing这个开源库做二维码的扫描模块,开发过程的一些代码修改和裁剪的经验和大家分享一下. ...

  3. GM65条形码二维码扫描识别模块与STM32学习

    目录 模块介绍: 简介: 原理介绍: 工作流程: 技术参数: 修改配置: 代码介绍: 串口函数: 主函数: 模块介绍: 简介: GM65 条形码二维码扫描识别模块是一种基于激光扫描头的识别设备 原理介 ...

  4. 二维码扫描的相关知识

    1.二维码扫描 二维码,是一种采用黑白相间的平面几何图形通过相应的编码算法来记录文字.图片.网址等信息的条码图片.如下图 二维码的特点: 1.  高密度编码,信息容量大 可容纳多达1850个大写字母或 ...

  5. 基于Zxing的二维码生成和二维码扫描

    最近又在倒腾二维码,发现网上的教程都不够用,所以把之前整合的二维码Demo有拿出来重新添加些功能,这里也算是重新学习吧! 当然对于二维码,相信大家都很熟悉了.这里就不多说.本项目是基于Zxing的开源 ...

  6. ios二维码扫描插件,适配当前主流扫描软件,自定义扫描界面。

            二维码介绍: 二维码(QR(Quick Response)code),又称二维条码,最早起源于日本. 它是用特定的几何图形按一定规律在平面(二维方向)上分布的黑白相间的图形,是所有信息 ...

  7. 二维码扫描开源库ZXing定制化

    最近在用ZXing这个开源库做二维码的扫描模块,开发过程的一些代码修改和裁剪的经验和大家分享一下. 建议: 如果需要集成到自己的app上,而不是做一个demo,不推荐用ZXing的Android外围开 ...

  8. 【Android】移动端二维码扫描解决方案衍变

    移动端二维码扫描解决方案衍变 目录 踩坑&方案 方案选择 Zxing方向 Hms ScanKit方向 总结 目录 踩坑&方案 Zxing yyds? no,no,no -> Sc ...

  9. android USB摄像头做条形码及二维码扫描(1)

    摘要: 1.前言 2.底层配置 3.JNI实现 4.总结 5.BUG及优化记录 android USB摄像头做条形码及二维码扫描(2) 1. 前言 公司做的产品基于android开发板搭建的控制系统, ...

最新文章

  1. 有没有哪些数学猜想是验证到很大的数以后才发现是错的?
  2. wxWidgets:wxSocketBase类用法
  3. Innodb中MySQL如何快速删除2T的大表
  4. 数据结构---顺序查找和二分查找
  5. 监视器java_Java监视器绑定的超人
  6. 汽车电子专业知识篇(二)-汽车以太网如何影响ECU和传感器设计
  7. 843. n-皇后问题
  8. LeetCode 1701. 平均等待时间(模拟)
  9. android lottie字体json,Android 动画深入Lottie
  10. php.ini修改php上传文件大小限制的方法
  11. Android实现税博客,Android个人所得税计算器
  12. 相机激光标定算法:从理论到实践
  13. 论文翻译-A Comprehensive Survey on Graph Neural Networks《图神经网络GNN综述》
  14. 【MikTe安装】最新的MiKTeX替换CTEX默认安装的MiKTeX
  15. PhalApi+Gearman,接口MQ异步队列任务的完整开发教程
  16. 千里挑一!玻色量子获金鸡湖创业大赛人工智能赛道冠军
  17. 科学家揭开猫狗不和之谜 情感表达方式不同
  18. 知识付费直播使用https方法
  19. 带你了解什么是MySQL数据库(六)索引原理,如何建立与使用索引
  20. 爬取豆瓣正在上映的影片信息

热门文章

  1. zippo蚀刻计算机键盘,【图片】蚀刻机自己填漆【zippo吧】_百度贴吧
  2. 再编写代码中报错:CS8107 C# 7.0 中不支持功能“xxxxxx”。请使用 7.1 或更高的语言版本。...
  3. 计算机毕设(附源码)JAVA-SSM基于Internet快递柜管理系统
  4. linux 物理内存释放,swap释放
  5. 目前住院病人主要由护士护理,这样做不仅需要大量护士,而且由于不能随时观察危重病人的病情变化,还会延误抢救时机。某医院打算开发一个以计算机为中心的患者监护系统,请用数据流图描述下面系统的业务流程。
  6. GoLang音视频转码
  7. Android高手笔记 - 网络优化
  8. 大疆校招和社招 各岗位内推码--更新20220717
  9. 【106】360查字体-查询本地字体版权是否可商用
  10. Win10 WSL2 linux 子系统安装Docker