前言

身在物流行业,扫描条码的场景很多。为了改造 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 被映射成 111011000),根据二进制数查表,得到字符。在对这个宽度数组进行解码的时候使用了一个叫 like-edge measurement 也叫 similar-edge measurement 的机制进行计算,操作上是,计算第 0 和第 1 element 的宽度和 a、第 1 和第 2 element 的宽度和 b、… 第 4 和 第 5 element 的宽度和,可以解决一部分因为边界模糊而导致的宽度误差。识别到终止符的时候组装字符返回结果,再次识别出某结果,该结果quality 加 1(quality 可以理解成 votes,可以考虑在 quality 大于某个阈值时提前结束识别,减少不必要的计算。)

ZBar 源码分析 beta相关推荐

  1. ZBar源码分析(五)

    2021SC@SDUSC 目录 一.image头文件分析 二.image源文件分析 1.zbar_image_create函数分析 2._zbar_image_free函数分析 3.一系列get.se ...

  2. ZBar源码分析(一)

    2021SC@SDUSC 目录 一.zbar.h头文件分析 二.图像处理器代码分析 一.zbar.h头文件分析 在安装路径下,include中有个zbar.h文件,首先从这个头文件入手. zbar.h ...

  3. ZBar源码分析——多线程部分代码分析 | 2021SC@SDUSC

    2021SC@SDUSC 目录 一.ZBar中的多线程 线程:cpu调度的最小单位 何为线程安全? 锁机制 二.ZBar中使用多线程的代码示例 Window线程的上锁与解锁 Vedio视频流的上锁与解 ...

  4. ZBar源码分析——image.c | 2021SC@SDUSC

    2021SC@SDUSC 一.Image 模块 ZBar的工作流程在以往的博客中做过一些介绍,在前几次的博客分析中也对video input部分和image scanner部分的一些代码进行了分析.在 ...

  5. ZBar源码分析——video.c | 2021SC@SDUSC

    2021SC@SDUSC 目录 一.Video模块 二.代码分析 三.总结 一.Video模块 我们知道,扫描时提供给ZBar的不都是静态的图片,也有可能是动态的视频.例如我们日常生活中调用的微信扫码 ...

  6. ZBar源码分析(七)

    2021SC@SDUSC 目录 一.zbar_image_write函数分析 二.Processor C++ wrapper分析 一.zbar_image_write函数分析 该函数将原始图像数据转储 ...

  7. ZBar源码分析(三)

    2021SC@SDUSC 目录 一.zbar_processor_create函数分析 二.zbar_processor_destroy函数分析 三.zbar_processor_init函数分析 四 ...

  8. redis源码分析(beta版本)-redis实现的概述逻辑

    redis概述 redis作为一个高性能的kv数据库,基于c语言实现,数据主要基于内存存放,所以查询效率较高,并且支持较多的数据类型有字符串.字典.列表与集合等数据结构.另外redis叶支持持久化的日 ...

  9. ZBar源码分析(二)

    2021SC@SDUSC 目录 一.processor头文件分析 二.processor源文件_zbar_processor_handle_input函数分析 一.processor头文件分析 #de ...

最新文章

  1. 做科研不得不学习的知识和技术的摇篮
  2. 新网站如何在最短的时间内提升排名呢?
  3. script的加载方式与执行
  4. net use 命令集合详解
  5. 解决sublime3 中文乱码问题
  6. HMAC算法及其应用
  7. 《Dubbo迈出云原生重要一步-应用级服务发现解析》
  8. faker.js 登 GitHub 趋势榜标星 27.1k,可大批量生成假数据!
  9. 所有controller interceptor_阿里二面:filter、interceptor、aspect应如何选择?很多人中招...
  10. android-ndk-aide,NDK安装教程20180605
  11. 熬了整整30天,java工作流开发
  12. App云端打包失败常见问题汇总
  13. era5数据内容说明_接口测试:A04_HttpRunner通用_02_提取数据_01_extract关键字
  14. JavaWeb-谷歌验证码的使用
  15. hprose-php教程,hprose php用户手册
  16. wordpress博客引用外链图片加载不出
  17. 19.1 快速幂的定义和模板
  18. (转)Linux下管道的原理
  19. 另类数据:跟踪期货高手持仓策略(完整录播)
  20. 短信验证码登录流程思路及详细步骤

热门文章

  1. 程序设计题目:合影效果_C++参考解法
  2. ES7(ElasticSearch7) 操作集群基础
  3. 学习太极创客 — ESP8226 (九)JSON 数据通讯 三
  4. matlab 伽马噪声,使用Matlab中的randg Gamma定律创建噪声图像并消除噪声?
  5. 千元级塞班强机 诺基亚5250惊爆价仅810元
  6. Matlab中load函数的用法
  7. 系统集成公司到底是干啥的
  8. Linux 周期性计划任务 crontab
  9. Linux中Debian版中安装中文字体
  10. springboot集成LTS