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)
上一篇 2025年11月28日 下午7:01
下一篇 2025年11月28日 下午7:22


相关推荐

  • (c语言)圣诞树

    (c语言)圣诞树Mooc 课后习题集及做到的一些有趣的题这是我初学 c 开始有意识的记录自己做的每一道题开始写下的代码水平一个一个代码发出来直到我现在学的数据结构那个时候还不会注释格式什么的也是按照自己怎么喜欢怎么来如果真不会看会代码理解一下 qwq 如代码有错请见谅毕竟都好久以前敲得了 hhh 如果对各位的思路引导有帮助那更好 include stdio h intmain inti j n space printf 请输入树的层数 scanf stdio h

    2026年3月17日
    2
  • golang嵌入式开发_持续集成平台对比

    golang嵌入式开发_持续集成平台对比Drone官方示例-ExampleGoproject用Docker部署Go服务器Golang官方示例-outyet一个生产环境的例子实际的DevOps项目中,在pipeline流水线中包含下载代码、测试、构建、发布、部署、通知等步骤。基本流程如下,当然不同的语言或不同的需求下流程会有所差异:clone->test->build…

    2022年8月15日
    5
  • JAVA POI的使用

    JAVA POI的使用下载地址 https archive apache org dist poi release bin 需要的 jar 包 我用的是 3 10final Poi 3 10 Final jar 用于 xls Poi ooxml 3 10 Final jar 用于 xlsx Poi ooxml schemas 3 10 jarXmlbeans 2 30 jardom4j 1 6 1 jarp

    2025年11月1日
    7
  • 前端优化:前端性能优化方法

    前端优化:前端性能优化方法一 结构优化 1 gzip 压缩 gzip 压缩效率非常高 通常可以达到 70 的压缩率 npmi Dcompression webpack pluginconfig config gt constCompres require compression webpack plugin config plugins push newCompressi 2 预渲染服务端渲染 SSR 简

    2026年3月18日
    3
  • esp-idf的内存管理——tlsf算法

    esp-idf的内存管理——tlsf算法目录1最初还不是tlsf2为什么要引入tlsf3idf中使用的tlsf算法的设计与实现4源码走读参考1最初还不是tlsf2为什么要引入tlsf3idf中使用的tlsf算法的设计与实现4源码走读参考[1]半文钱的博客[2]upstream所在的github地址注意事项放到内存调试去说:用户需要关注的:内存的硬件特性(caps)内存的访问速度内存是否支持原子操作内存是否可以由CPU直接访问用户在使用时:用户自己也要对自己的应用需要使用的内存做一些安排,有的内存比

    2022年6月29日
    27
  • linux如何退出文件查看模式,linux vi保存退出指令(如何退出vi)

    linux如何退出文件查看模式,linux vi保存退出指令(如何退出vi)有很多方法退出Vi当编辑完文件准备退出Vi返回到shell时可以使用以下几种方法之一在命令模式中连按两次大写字母Z若当前编辑的文件曾被修改过则Vi保存该文件后退出返回到shell;若当前编辑的文件没被修改过则Vi直接退出返回到shell在末行模式下输入命令:wVi保存当前编辑文件但并不退出而是继续等待用户输入命令在使用w命令时可以再给编辑文件起一个新的文件名[例]:wnewfi…

    2026年4月15日
    4

发表回复

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

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