聊聊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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 原文链接 背景 识别二维码的项目数不胜数,每次都是开箱即用,方便得很。这次想用 OpenCV 从零识别二维码,主要...
    粗识名姓阅读 5,029评论 1 21
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,626评论 0 17
  • 与你们一起《梦想起航》,也许那是一个《到不了》的彼岸,但四叶草会用《爱出发》,这是一个《安静》的宁夏,四叶草愿做你...
    小木乖阅读 162评论 0 0
  • 这张牌可以是指教会、教义,以及概括而言的教育。从心理上来说,它可以意味着正统,对社会的理念及行为准则的服从,以及,...
    zoey妈阅读 150评论 0 0
  • 在我国现在饲养宠物的家庭越来越多,在这些宠物当中狗狗的数量算是最多的。主人们都希望自己家的狗狗懂事听话,能够完成日...
    任小艺早教女神阅读 338评论 0 0