专栏首页码匠的流水账聊聊qrcode的detect position

聊聊qrcode的detect position

本文主要介绍下qrcode的detect position,也就是定位图案,用于定位一张图片中二维码所处的位置。

qrcode分类

QRCode 分为 Model 1、Model 2、Micro QR 三类:

  • Model 1 :是 Model 2 和 Micro QR 的原型,从Version 1 到 Version 14 共14种尺寸。
  • Model 2 :是 Model 1 的改良版本,添加了对齐标记,从Version 1 到 Version 40 共40种尺寸。
  • Micro QR :只有一个定位标记,最小尺寸是 11*11 modules 。 这里默认model 2

version

qrcode有个Version的概念,不同的version对应不同的尺寸大小。其公式如下:

Version对应的矩阵边长 = (V-1)*4 + 21

Version 1是21 x 21的矩阵,Version 2是 25 x 25的矩阵,Version 3是29的尺寸,每增加一个version,就会增加4的尺寸。 最高Version 40,(40-1)*4+21 = 177,所以最高是177 x 177 的矩阵。

qrcode原始byteMatrix实例

内容为hello world,version为2,qrcode矩阵为25 x 25

 1 1 1 1 1 1 1 0 1 0 0 1 1 0 1 1 1 0 1 1 1 1 1 1 1
 1 0 0 0 0 0 1 0 1 0 0 1 0 1 0 1 0 0 1 0 0 0 0 0 1
 1 0 1 1 1 0 1 0 1 1 1 1 0 1 0 0 1 0 1 0 1 1 1 0 1
 1 0 1 1 1 0 1 0 0 1 0 1 0 0 1 0 0 0 1 0 1 1 1 0 1
 1 0 1 1 1 0 1 0 0 1 0 1 1 1 0 0 1 0 1 0 1 1 1 0 1
 1 0 0 0 0 0 1 0 1 1 0 1 1 0 0 0 0 0 1 0 0 0 0 0 1
 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1
 0 0 0 0 0 0 0 0 1 0 1 1 1 0 0 0 1 0 0 0 0 0 0 0 0
 0 0 1 1 1 0 1 0 1 1 1 0 0 1 0 0 0 1 1 1 0 0 1 1 1
 0 1 0 0 1 1 0 1 0 0 0 0 1 1 1 1 1 1 0 1 1 0 0 0 1
 0 1 1 0 0 0 1 1 1 0 1 0 1 0 0 1 1 1 1 0 1 1 1 0 0
 0 1 0 0 0 0 0 1 1 1 0 0 1 0 1 1 0 1 0 1 0 0 0 0 0
 0 0 0 0 0 1 1 0 1 1 1 1 0 0 1 1 0 0 1 1 1 0 0 1 1
 1 1 0 0 0 0 0 1 0 0 0 1 0 0 0 1 1 0 0 1 0 0 0 1 0
 1 0 0 0 1 1 1 0 0 1 1 1 1 0 1 0 0 1 1 1 1 1 1 0 0
 1 0 1 0 0 0 0 0 0 1 0 0 1 1 1 0 1 0 0 1 0 0 1 0 1
 1 0 1 1 1 1 1 0 1 1 0 0 1 0 1 0 1 1 1 1 1 1 0 0 1
 0 0 0 0 0 0 0 0 1 1 1 1 0 0 1 1 1 0 0 0 1 0 0 0 1
 1 1 1 1 1 1 1 0 0 0 0 1 1 0 1 1 1 0 1 0 1 1 1 1 1
 1 0 0 0 0 0 1 0 0 1 0 1 0 0 0 1 1 0 0 0 1 0 1 0 0
 1 0 1 1 1 0 1 0 1 1 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0
 1 0 1 1 1 0 1 0 1 1 0 0 1 1 1 1 0 1 0 0 0 0 0 1 1
 1 0 1 1 1 0 1 0 1 0 1 0 0 1 1 1 0 0 1 0 0 1 1 0 1
 1 0 0 0 0 0 1 0 0 0 1 1 0 0 1 1 0 1 1 0 1 0 1 1 0
 1 1 1 1 1 1 1 0 0 1 0 1 0 0 1 0 0 0 0 0 0 0 1 1 1

position detection

 1 1 1 1 1 1 1
 1 0 0 0 0 0 1
 1 0 1 1 1 0 1
 1 0 1 1 1 0 1
 1 0 1 1 1 0 1
 1 0 0 0 0 0 1
 1 1 1 1 1 1 1

qrcode的定位图案,标准的3个,左上角、右上角,左下角,边长为7

Alignment

1 1 1 1 1 
1 0 0 0 1 
1 0 1 0 1 
1 0 0 0 1 
1 1 1 1 1

边长为5,只有Version 2以上(包括Version2)的qrcode才需要,辅助定位。至少0个,至多6个,根据version不同个数不一样 version8的实例如下:

判断一个点是否在detect position内

主要判断x,y坐标是否在几个边界值内

if( (x < 7 && y < 7) //左上角
    || (x < 7 && (y >= height - 7)) //左下角
    || ((x >= width - 7) && y < 7)){ //右上角
    //在detect position之内
}

doc

  • QR Code Standardization
  • 二维码的生成细节和原理
  • 学习笔记:使用 OpenCV 识别 QRCode
  • 基于Zxing修改定位点(码眼)的颜色
  • QR 码的位置检测符

本文分享自微信公众号 - 码匠的流水账(geek_luandun)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-10-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 聊聊dubbo-go的TokenFilter

    dubbo-go-v1.4.2/filter/filter_impl/token_filter.go

    codecraft
  • 聊聊dubbo-go的TokenFilter

    dubbo-go-v1.4.2/filter/filter_impl/token_filter.go

    codecraft
  • 聊聊nifi的AbstractBinlogTableEventWriter

    本文主要研究一下nifi的AbstractBinlogTableEventWriter

    codecraft
  • Scala中的Map使用例子

    我是攻城师
  • 【头条】谷歌发布全新TensorFlow 库tf.Transform;百度将Ring Allreduce算法引入深度学习

    谷歌发布全新 TensorFlow 库“tf.Transform” 谷歌表示,tf.Transform 将改善 TensorFlow 的数据预处理和格式转化难题...

    AI研习社
  • 独家 | 经验&教训分享:我的第一个机器学习项目

    在这片博客中,我将介绍队友(Aron,Ashish,Gabriel)和我如何完成我们的第一个机器学习项目。写这篇博客的目的是为了记录——记录下我作为一名有抱负的...

    数据派THU
  • 常见的AXI总线仲裁器概述

    AMBA AXI 总线协议以高性能、高频率的系统设计为目标,适合高带宽、低延迟的系统设计,可以达到高频率的操作而不需要复杂的总线桥,满足众多部件的接口要求,具备...

    数字IC小站
  • 速读原著-Android应用开发入门教程(屏幕间的跳转和事件的传递)

    在一般情况下,Android 的每一个屏幕基本上就是一个活动(Activity),屏幕之间的切换实际上就是在活动间互相调用的过程,Android 使用 Inte...

    cwl_java
  • 速读原著-Android应用开发入门教程(屏幕间的跳转和事件的传递)

    在一般情况下,Android 的每一个屏幕基本上就是一个活动(Activity),屏幕之间的切换实际上就是在活动间互相调用的过程,Android 使用 Inte...

    cwl_java
  • 超好用的谷歌浏览器、Sublime Text、Phpstorm、油猴插件合集

    一、谷歌浏览器插件 二、Sublime Text 插件 三、Phpstorm 插件 四、油猴脚本 4.1 脚本网站 4.2 自用的脚本 五、相关链接 ? 分享...

    琯琯

扫码关注云+社区

领取腾讯云代金券