ZBar 源码分析 beta

ZBar 源码分析 beta前言身在物流行业 扫描条码的场景很多 为了改造 ZBar 使其返回条码方向 条码与水平线的夹角 阅读了 ZBar 的源码 总结一下 没有弄清楚所有细节 只说说我弄清楚的部分 主流程应该大家都知道 ZBar 是 Z 字型扫描的 为什么要 Z 字型扫描 不清楚 一次扫描一行或者一列 在扫描过程中做滤波 EWMA 指数加权移动平均 可以消除部分噪声影响 然后计算梯度变化 确定边缘 计算当前

前言

身在物流行业,扫描条码的场景很多。为了改造 ZBar 使其返回条码方向(条码与水平线的夹角),阅读了 ZBar 的源码。总结一下。(没有弄清楚所有细节,只说说我弄清楚的部分)

主流程

应该大家都知道 ZBar 是 Z 字型扫描的。(为什么要 Z 字型扫描?不清楚。)一次扫描一行或者一列,在扫描过程中做滤波,EWMA,指数加权移动平均,可以消除部分噪声影响,然后计算梯度变化,确定边缘,计算当前边缘与上一边缘的距离作为一个条码元素( element,bar 或者 space)的宽度,这些元素宽度放在一个滑动窗口数组中,以 Code 128 为例,这个数组的长度是 6,因为 Code 128 是 3 个 bar 加 3 个 space 表示一个字元。每个字元宽度是最窄 element 的 11 倍,各个 element 根据类型(bar、space)以及所占份数(宽度是最窄 element 的几倍)被应设成二机制数,(举例来说,x 代表一份宽度的 bar,o 代表一份宽度的 space,xxxoxxooo 被映射成 ),根据二进制数查表,得到字符。在对这个宽度数组进行解码的时候使用了一个叫 like-edge measurement 也叫 similar-edge measurement 的机制进行计算,操作上是,计算第 0 和第 1 element 的宽度和 a、第 1 和第 2 element 的宽度和 b、… 第 4 和 第 5 element 的宽度和,可以解决一部分因为边界模糊而导致的宽度误差。识别到终止符的时候组装字符返回结果,再次识别出某结果,该结果quality 加 1(quality 可以理解成 votes,可以考虑在 quality 大于某个阈值时提前结束识别,减少不必要的计算。)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/231663.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java生成指定位数的随机数「建议收藏」

    java生成指定位数的随机数「建议收藏」java生成指定位数的随机数

    2022年4月23日
    210
  • 2022.1 pycharm激活码-激活码分享

    (2022.1 pycharm激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月31日
    2.5K
  • CountDownTimer

    CountDownTimerCountDownTimer源码解析在平时开发过程中我们可能需要一个倒计时来实现某个功能,这时候我们可以使用CountDownTimer来实现该功能作用可用于倒计时操作,内部采用Handler来实现的那我们来看一看它内部到底是如何实现?首先我们使用构造函数创建CountDownTimer对象,需要传递两个参数,并实现两个抽象方法构造函数publicCountDown…

    2022年9月18日
    2
  • 语义分割步骤_实时语义分割

    语义分割步骤_实时语义分割 深度学习发展到现在,各路大神都发展出了各种模型,这里就做个伸手党吧。在深度学习实现过程中最重要的最花时间的我觉得应该是数据预处理与后处理,会极大影响最后效果,至于模型,感觉像是拼乐高积木,一个模块一个模块地叠加,拼成最适合自己的模型。1数据预处理1.1图像切割 一般而言,训练集会是一整张大图,所以需要自己切割成小图训练,可以做切割,也可以在训练时划窗读取,最好先做切割,可以检查数据。切…

    2022年8月21日
    9
  • linux tracker服务器搭建,linux 下 BT Tracker服务器搭建

    linux tracker服务器搭建,linux 下 BT Tracker服务器搭建必须有python2.*以上的环境1、安装bittorrenttarzxvfBitTorrent-3.4.2.tar.gzcdBitTorrent-3.4.2pythonsetup.pyinstall2、启动Bit服务./bttrack.py–port6969–dfiledstate>>/var/log/bttrack.log#表示打开6969并记录log3、制…

    2022年6月25日
    41
  • IDEA2018.2.1最新版本破解[通俗易懂]

    转载自:https://www.52pojie.cn/thread-781394-1-1.html再次换电脑,再次安装IDEA,之前的破解用不了,再次查找破解方法。1、把下载的破解补丁放在你的idea的安装目录下的bin的目录下面(如下图所示),本文示例为F:\ProgramFiles\JetBrains\IntelliJIDEA2018.2\bin\JetbrainsCrack-3….

    2022年4月17日
    55

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号