基于opencv和zbar的二维码定位与解码

本文介绍了如何结合opencv进行二维码定位及利用zbar进行解码。通过寻找二维码的匹配模式区域,利用opencv的findContours函数检测轮廓,并筛选出二维码的三个顶点。之后使用zbar在ROI区域内进行解码,即使二维码部分位于边界也能有效识别。
摘要由CSDN通过智能技术生成

简介:最近研究了一下二维码的定位与解码,看了很多大神的博客文章,现在将总结的方法与心得体会写在博客中。源程序见本博客的最下方。


一、二维码的结构

通过很多博客文章的介绍,我们可以知道二维码有三个匹配模式区域,又叫PositionDetectionPattern。这三个区域位于二维码的三个顶点(下图中左下、左上、右上顶点)。与大多数方法类似,我们也是通过寻找这三个匹配模式区域来对二维码进行定位。

二、使用opencv对二维码进行定位


下面我们使用opencv对下图中的二维码进行定位。我们主要使用opencv中的findContours()函数,顾名思义,其主要作用便是在二值图像中寻找轮廓。


vector<vector<Point>> contours;
vector<Vec4i> hireachy;
findContours(binary, contours, hireachy, RETR_TREE, CHAIN_APPROX_SIMPLE,
Point());

输入的第一个参数为二值图像;

第二个参数为轮廓,函数检测到的轮廓存在该参数中;

第三个参数表示图像中轮廓的拓扑信息,我们主要是根据轮廓的拓扑信息来对二维码的匹配模式区域进行定位;每一个轮廓contours[ i ]对应4个hierarchy元素hierarchy [ i ][ 0 ]~hierarchy [ i ][ 3 ],分别表示后一个轮廓、前一个轮廓、父轮廓、内嵌轮廓的索引编号。如果没有对应项,对应的hierarchy [ i ] 值设置为负数。

第四个参数表示轮廓的检测模式,RETR_TREE表示提取所有轮廓,建立网状的轮廓结构,对检测到的轮廓建立等级关系。


现在我们把所有检测到的轮廓在原图中画出进行观察,如下图所示。


  • 7
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值