使用相机图像从Pyzbar检测QR码

时间:2018-04-28 20:49:34

标签: python opencv image-processing qr-code

我在使用Pyzbar检测QR码时遇到问题。在完美条件下,我能够使用原始png图像检测QR码。但是,当我从相机进行视频捕获,然后将该帧保存为图像时,pyzbar无法检测到QR码。

例如,这可行

enter image description here

[Decoded(data=b'GOAL', type='QRCODE', rect=Rect(left=16, top=16, width=168, height=168))]

但是,在我手动裁剪周围环境以仅显示QR码后,以下情况甚至没有。

enter image description here

[]

对于这两张图片,我正在使用

decode(image, scan_locations=True)

我想知道为了让pyzbar解码我的QR码图像需要做些什么?

2 个答案:

答案 0 :(得分:2)

使用OpenCV将图像阈值设置为黑白,然后pyzbar能够解码QR码。

首先,使用下面的代码对图像进行阈值处理。

from pyzbar import pyzbar
import argparse
import numpy as np
import cv2

image =cv2.imread("QRCode.png")

# thresholds image to white in back then invert it to black in white
#   try to just the BGR values of inRange to get the best result
mask = cv2.inRange(image,(0,0,0),(200,200,200))
thresholded = cv2.cvtColor(mask,cv2.COLOR_GRAY2BGR)
inverted = 255-thresholded # black-in-white

以下是已处理的图像。

enter image description here

使用,

barcodes = pyzbar.decode(inverted)
print (barcodes)

打印输出显示解码后的类型为QRCODE,数据为GOAL

[Decoded(data='GOAL', type='QRCODE', rect=Rect(left=5, top=13, width=228, height=212), 
polygon=[Point(x=5, y=222), Point(x=233, y=225), Point(x=220, y=19), Point(x=13, y=13)])]

希望得到这个帮助。

答案 1 :(得分:0)

您面临的问题是由于您在处理之前翻转了图像

使用pyzbar处理后翻转图像将使其对齐,如您所愿