更强大的二维码识别工具zBar

代码位置:102-ScannerQRCodeWithZbar.py
OpenCV自带的二维码识别工具,能力较差,尤其是在如下的情况下经常识别不出来。

更强大的二维码识别工具zBar 更强大的二维码识别工具zBar 更强大的二维码识别工具zBar
现在我们使用zBar这个开源二维码工具,它自身是C语言编写。支持多个操作系统,在Android和iPhone上支持的也很好。 我们只介绍python版本,这个版本是OpenCV与zBar的结合使用。 安装zBar 首先安装zBar的二进制版本。
sudo apt-get install libzbar-dev

然后安装zBar的Python包

pip install pyzbar

实际代码如下:

from __future__ import print_function
import pyzbar.pyzbar as pyzbar
import numpy as np
import cv2


def decode(im):
    # 在这里查找二维码
    decodedObjects = pyzbar.decode(im)

    # 打印出结果
    for obj in decodedObjects:
        print('Type : ', obj.type)
        print('Data : ', obj.data, '\n')

    return decodedObjects


def display(im, decodedObjects):

    for decodedObject in decodedObjects:
        points = decodedObject.polygon

        if len(points) > 4:
            hull = cv2.convexHull(np.array([point for point in points], dtype=np.float32))
            hull = list(map(tuple, np.squeeze(hull)))
        else:
            hull = points;


        n = len(hull)

        for j in range(0, n):
            cv2.line(im, hull[j], hull[(j + 1) % n], (255, 0, 0), 3)

    cv2.imshow("Results", im);
    cv2.waitKey(0);

# Read image
im = cv2.imread('./res/QR3.jpeg')
decodedObjects = decode(im)
display(im, decodedObjects)