二维码是怎么生成的?

二维码其实就是由很多0、1组成的数字矩阵。二维码是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息;它巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设备自动识读以实现信息自动处理。

下面我们来看一个简单的二维码样例:

其实,二维码就是把你想表达的信息翻译成黑白两种小方块,然后填到这个大方块中。在定位准确的前提下,只要机器读取到的那个部分有一个黑点——哪怕只是小小的黑点,都不妨碍它被识别为“1”,连一丁点儿小黑点都没有的地方自然就被识别为“0”了,因此二维码也未必都是由黑白小方块组成。

缺了一块也能扫?

二维码的组成中含有很多纠错码,假如需要编码的码字数据有100个,并且想对其中的一半,也就是50个码字进行纠错,则计算方法如下。纠错需要相当于码字2倍的符号,因此在这种情况下的数量为50个×2=100码字。因此,全部码字数量为200个,其中用作纠错的码字为50个,也就是说在这个二维码中,有25%的信息是用来纠错的,因此即使缺了一点或者变皱了也一样能被识别,不信你试试。

这也就是为什么现在许多二维码中央都可以加上LOGO,比如算数学苑~

或者用其他东西代替LOGO也不要紧哦~

为什么有三个大方块?

这个我们就需要聊到二维码是怎么被手机识别的。

由于不同颜色的物体,其反射的可见光的波长不同,白色物体能反射各种波长的可见光,黑色物体则吸收各种波长的可见光.所以当摄像头扫描黑白相间的二维码上时,手机利用点运算的阈值理论将采集到的图象变为二值图像,即对图像进行二值化处理,得到二值化图像后,对其进行膨胀运算,对膨胀后的图象进行边缘检测得到条码区域的轮廓。

然后经过一项灰度值计算公式对图像进行二值化处理。得到一幅标准的二值化图像后,对该符号进行网格采样,对网格每一个交点上的图像像素取样,并根据阈值确定是深色“1”还是浅色“0”,从而得到二维码的原始二进制序列值,然后对这些数据进行纠错和译码,最后根据条码的逻辑编码规则把这些原始的数据转换成数据。

我们在使用手机扫描的时候无论是什么方向,甚至歪歪扭扭,都能够正确识别二维码的内容,就是因为手机通过这三个黑色小方块定位出二维码正确的方向。所以这三个黑色小方块千万不能被挡住,当然倒也不一定非得是方块形状的啦…

试试扫一下!

看到这相信大家对二维码应该有所了解了吧,可能有人会说这些都太简单了,网上有很多很有创意的二维码呢,好吧,和小编一起来看看都是怎么做的呢。

如下图就是一个普通二维码的基本结构。黑白元素其实就是二进制,三个定位用图案,以及中间的一些信息储存区。

来看一张我们设计师的杰作 

说了那么多,你还是发挥不出来这样的艺术风格?好,那还是撸起袖子一起做吧。

我们来以一个较简单的29x29的二维码为例

❖ 首先给二维码拉一个同样大小的网格以区别二维码中相邻的像素点,同样,这里二维码中的黑色块也已经预处理为圆形以示区分。

实际经验表明在对二维码中的黑色圆点进行艺术修改时,通常替代图形最小不能上小于图中的红色圆点,最大也不能大于上图中的黄色圆点,从而保证实际操作中二维码的识别度不会下降甚至完全无法识别。

❖ 其次,根据拟采取的艺术主题,将不同的黑色圆点组合替换成相应的素材实例,下面以几种水果给出这个过程的具象化表示。

左边表示所替换的相邻黑色圆点的数目,右边表示拟替换的素材。

❖ 第三,将二维码按照相邻黑色圆点的数目、形状以及艺术想法等,划分为不同的区域,每一个区域都保证可以使用上述列表中的素材进行替代。如下图所示。

❖ 最后,将拟定的素材替换到二维码中规划好的黄色区域。这一步需要边替换边检查二维码是否能够被正常识别哦。

通过上述过程,就可以实现二维码中黑色圆点的艺术化修改,打造一款自己需要主题的特色二维码。看完整个过程,你是不是也心动了呢!

再|来|几|张

看完这些,是不是觉得创意二维码并没有那么难?是啊,有些事看起来很难,但是只要你想尝试,去动手,去思考,问题就会迎刃而解啦~

又是一年元旦到,祝各位粉丝拥有一个更加灿烂更加辉煌的2018!

算法数学之美微信公众号欢迎赐稿

稿件涉及数学、物理、算法、计算机、编程等相关领域。稿件一经采用,我们将奉上稿酬。投稿邮箱:math_alg@163.com

二维码原来可以这样玩相关推荐

  1. 第47章 QR-Decoder-OV5640二维码识别—零死角玩转STM32-F429系列

    第47章     QR-Decoder-OV5640二维码识别 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.y ...

  2. 第47章 QR-Decoder-OV5640二维码识别—零死角玩转STM32-F429系列

    第47章     QR-Decoder-OV5640二维码识别 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.y ...

  3. 银联押宝二维码支付 背后还有一片纷争江湖

    昨天银联二维码支付标准正式发布了.这被市场看做,此前存在安全隐患.饱受争议的二维码支付终于合规化了.各位以后去商家扫码,会有不同选择了:支付宝的.微信的.还有银联的.不过我估计各位还是哪个方便.哪个优 ...

  4. 【MaixPY 教程】用mixly玩转k210——条形码、二维码、AprilTag识别

    [MaixPY 教程]用mixly玩转k210--条形码.二维码.AprilTag识别 [MaixPy系列教程:] [MaixPy教程]用maixHub训练模型进行开源硬件识别 [MaixPy 教程] ...

  5. 渠道二维码的基础玩法总结

    以认证服务号为例,后台支持下载的二维码,并没有详细的数据统计功能. 如果你在AB二个地方都了一场活动,想知道哪个地方的效果最好(带来的粉丝最多)? 可以用渠道二维码.比如,当粉丝在A地扫码关注了你的公 ...

  6. 【Python】玩转二维码:生成、伪造和识别

    玩转二维码 前言及视频 一.二维码的生成 1.1 导包和相关说明 1.2 设置当前目录 1.3 设置保存目录 1.4 设置图标文件 1.5 清空输入项 1.6 初始化二维码 1.7 生成二维码图片主程 ...

  7. 玩转Android之二维码生成与识别

    二维码,我们也称作QRCode,QR表示quick response即快速响应,在很多App中我们都能见到二维码的身影,最常见的莫过于微信了.那么今天我们就来看看怎么样在我们自己的App中集成二维码的 ...

  8. 用Python玩转二维码

    二维码(Quick Response Code)几乎已经渗透到我们日常生活的每一个角落. 二维码是 1994 年发明的一种矩阵条形码. 实际上,二维码通常包含指向网站或应用程序的定位器.标识符或跟踪器 ...

  9. 【写着玩】二维码检测及定位

    文章目录 基于轮廓嵌套的识别方法 OpenCV 中的 QRCodeDetector 最近在B站上看到了 PaperClip 关于二维码的视频,主要讲的是二维码中的纠错码.但是在读取二维码内容前需要先定 ...

最新文章

  1. puppet aix之自动化用户管理
  2. python如何安装seaborn模块_seaborn模块的基本使用
  3. nodejs基础学习-文件读取
  4. 操作系统线程互斥,锁死机制的简单介绍
  5. JVM专题之分代模型:年轻代、老年代、永久代
  6. 计算机符串长度的函数,用js写一个函数,计算出字符串的长度
  7. excel 两组数据交点_让科研人相见恨晚的技巧,用Excel做柱状图、箱型图及数据分析!(转载自ZSCI)...
  8. 谈智能DNS解析的应用
  9. MySQL学习之——锁(行锁、表锁、页锁、乐观锁、悲观锁等)
  10. 好用!Visual Studio for mac(微软代码编辑器)中文版
  11. JeDate日期控件,未选择日,出现undefined错误
  12. 初级java程序员遇到的面试题
  13. Android 平台 Native 代码的崩溃捕获机制及实现
  14. 面试技巧-面试官的考题
  15. 第十届全国大学生GIS应用技能大赛上午(试题及参考答案)
  16. Codeforces936B. Sleepy Game
  17. html页面生成easyui,Easyui 为网页创建边框布局_EasyUI 教程
  18. cypher第一章背景与攻略
  19. Geogebra拓扑学家的正弦曲线
  20. 到西藏工作,出差,旅行,出游,体验,好奇一切的一切,大全科!!绝对是经典“教科书”类,上面见不到的!全面了解,西藏的生活水平,和注意事项,是去西藏,拉萨前的必读性文章。

热门文章

  1. 工作中应用计算机,浅谈计算机在我国计工作中的应用与发展.doc
  2. 包管理工具conda极简教程
  3. React Native新手引导
  4. 现代软件工程 M2 博客要求
  5. php 去年年初和年底时间,PHP 日期与时间
  6. python中zip的使用_浅谈Python中的zip()与*zip()函数详解
  7. app inventor2 打地鼠_春节越南旅行攻略必备手机APP推荐!旅游必备实用简单越南语...
  8. python出现的次数最多的元素_【Python 秘籍】序列中出现次数最多的元素
  9. go 默认http版本_【每日一库】超赞的 Go 语言 INI 文件操作
  10. python 如何判断一个函数执行完成_Python 函数为什么会默认返回 None?