实施例提供一 种识别二维码的方法及设备,能够提高定位二维码的位置探测图形的准确率,从而提高识 别二维码的成功率。
[0069] 实施例一
[0070] 本发明实施例提供一种识别二维码的方法,如图4所示,该方法可以包括:
[0071] S101、确定η个第一区域的η个重心点,其中,每个第一区域包括一个重心点,η个 第一区域为待识别二维码图像中水平区域和垂直区域的重叠区域,水平区域为水平方向上 黑色区域的宽度和白色区域的宽度的比例为第一预设比例的区域,垂直区域为垂直方向上 黑色区域的宽度和白色区域的宽度的比例为第一预设比例的区域,该二维码图像至少包括 二维码所在区域,η彡3, η为整数。
[0072] 其中,待识别二维码图像可以理解为扫描设备扫描待识别的二维码时,扫描到的 图像,该二维码图像中至少包括二维码所在区域。当扫描设备距离二维码所在区域较远时, 扫描到的二维码图像中还可能包括该二维码所在区域的背景区域,其中,背景区域为该二 维码图形中除该二维码所在区域以外的区域。
[0073] 在本发明实施例中,获取到二维码图像后,可以先对该二维码图像进行图像预处 理,包括对该二维码图像进行灰度化处理、二值化处理、去噪处理等,以使该二维码图像呈 现较为明显的黑白效果。进而可以对该二维码图像进行扫描,确定该二维码图像中的η个 第一区域。
[0074] 具体的,在确定该二维码图像中的η个第一区域时,可以分别从水平方向上确定 黑色区域的宽度和白色区域的宽度的比例为第一预设比例的水平区域,从垂直方向上确定 黑色区域的宽度和白色区域的宽度的比例为第一预设比例的垂直区域,并确定该二维码图 形中水平区域和垂直区域的重叠区域,一个重叠区域即为一个第一区域。
[0075] 示例性的,以确定水平区域为例,首先从左到右依次扫描该二维码图像中每一行 像素点的灰度值,当灰度值发生变化时,记录灰度值相同的连续的像素点的个数。例如,假 设该二维码图像中某一行像素点的灰度值分别为"a bbaabbaaaaaabbaa b",扫描设备扫描到的第一个像素点的灰度值为a,当扫描到第二个像素点时,由于第二个 像素点的灰度值为b,与第一个像素点的灰度值不同,即灰度值发生变化,因此,第一个像素 点构成一个区域,且该区域的像素点的个数为1。当扫描到第四个像素点时,由于第四个像 素点的灰度值为a,与第三个像素点的灰度值不同,因此,灰度值相同的第二个像素点和第 三个像素点构成一个区域,且该区域的像素点的个数为2。以此类推,可以确定该行由共八 个区域构成。
[0076] 其中,像素点的灰度值为a,表征该像素点呈现黑色,像素点的灰度值为b,表征该 像素点呈现白色。例如,根据现有的标准,呈现黑色的像素点的灰度值为255,则a = 255 ; 呈现白色的像素点的灰度值为〇,则b = 0。可以理解的是,该行的八个区域中,有四个黑色 区域和四个白色区域。
[0077] 进一步的,确定该行中是否存在黑色区域的宽度和白色区域的宽度的比例为第一 预设比例的水平区域,若存在,则标记该水平区域。
[0078] 需要说明的,第一预设比例可以根据二维码领域中规定的标准进行设置,具体的, 例如,根据现有的标准,在经过位置探测图形的重心点的每条直线上,五个连续的白色区域 的宽度和黑色区域的宽度,均可以满足黑色区域的宽度:白色区域的宽度:黑色区域的宽 度:白色区域的宽度:黑色区域的宽度为1:1:3:1:1,则在本发明实施例中,第一预设比例 可以设为1:1:3:1:1,即,在本发明实施例中,黑色区域的宽度和白色区域的宽度的比例为 第一预设比例,指黑色区域的宽度:白色区域的宽度:黑色区域的宽度:白色区域的宽度: 黑色区域的宽度为
[0079] 在本发明实施例中,黑色区域的宽度与白色区域的宽度的比例可以由黑色区域中 像素点的个数和白色区域中像素点的个数的比例表征。因此,该行中从第三个区域开始到 第七个区域结束,构成了一个水平区域。
[0080] 按照上述方法扫描该二维码图像中每一行像素点的灰度值,标记出该二维码图像 中的所有水平区域。
[0081 ] 按照上述方法,从上到下依次扫描该二维码图像中每一列像素点的灰度值,标记 出该二维码图像中的所有的垂直区域。
[0082] 进一步,将标记了水平区域的二维码图像和标记了垂直区域的二维码图像进行逻 辑与运算,获取该二维码图像中水平区域和垂直区域的η个重叠区域。其中,该η个重叠区 域即为本发明实施例中确定第一区域。该η个第一区域中至少包括一个像素点,根据该η 个第一区域中的每个第一区域中的像素点的坐标,确定每个第一区域的重心点,即确定了 η 个重心点。
[0083] 可以理解的是,在经过上述η个重心点中的每个重心点的水平方向上的直线和垂 直方向上的直线上,黑色区域的宽度和白色区域的宽度的比例均为第一预设比例。
[0084] S102、从η个重心点中确定该二维码的位置探测图形的重心点,该二维码的位置 探测图形中以该二维码的位置探测图形的重心点为中心的各个区域的面积的比例为第二 预设比例,且该二维码的位置探测图形的重心点的灰度值为a。
[0085] 示例性的,如图2所示的二维码的位置探测图形,以该二维码的位置探测图形的 重心点为中心的各个区域的面积分别为:该二维码的位置探测图形的内部黑色区域的面 积;由该二维码的位置探测图形的内部黑色区域和中间白色区域构成的区域的面积;由该 二维码的位置探测图形的内部黑色区域、中间白色区域,以及外部黑色区域构成的区域的 面积。
[0086] 需要说明的是,在本发明实施例中,第二预设比例可以根据实际工程中设置的第 一预设比例进行设置。例如,若第一预设比例设置为1: 1:3:1: 1,则第二预设比例可以设置 为 32: (1+3+1) 2:(1+1+3+1+1) 2,即 9:25:49。
[0087] 具体的,从η个重心点中确定该二维码的位置探测图形的重心点的步骤可以如下 所示:
[0088] S1、判断该η个重心点中第i个重心点的灰度值是否为a,若是,则执行S2,否则执 行S4,l彡i彡n,i为整数。
[0089] 当确定η个重心点后,对该η个重心点进行随机排序,从i = 1开始执行S1-S4,直 至确定出该二维码的一个位置探测图形,即可结束循环。
[0090] S2、以该第i个重心点为第二种子点,分别进行三次区域生长,形成三个连通域, 并分别计算该三个连通域的面积。
[0091] S3、若该三个连通域的面积的比例为第二预设比例,则该第i个重心点为该二维 码的位置探测图形的重心点,循环结束,否则执行S4。
[0092] S4、令 i = i+Ι,返回执行 S1。
[0093] 进一步的,上述S2具体可以包括:
[0094] S21、以第i个重心点为第二种子点,进行区域生长,形成第一连通域,并计算第一 连通域的面积。
[0095] S22:将第一连通域中所有像素点的灰度值均设为b,从第二种子点开始,重新进 行区域生长,形成第二连通域,并计算第二连通域的面积。
[0096] S23:将第二连通域中所有像素点的灰度值均设为a,从第二种子点开始,重新进 行区域生长,形成第三连通域,并计算第三连通域的面积。
[0097] 需要说明的是,在本发明实施例中,从第二种子点开始,进行的三次区域生长,都 是将第二种子点的邻近区域中与第二种子的灰度值相同的像素点,与第二种子点合并到一 个区域中,直至没有可以合并的像素点为止,分别形成三个连通域。
[0098] 示例性的,如图5所示,假设第i个重心点为该二维码的位置探测图形的重心点, 则以第i个重心点为第二种子点,进行三次区域生长后,分别形成的第一连通域为如图5中 的(a)所示的内部黑色区域,对应于如图2所示的该二维码的位置探测图形的内部黑色区 域,第二连通域为如图5中的(b)所示的白色区域,对应于如图2所示的该二维码的位置探