如何使用zbar获取检测到的QR码的x,y位置?

时间:2018-05-20 15:28:36

标签: python image-processing qr-code zbar

我在下面图片的两个QR码中编码了1639(可下载的here)。我打印出来,拍了一张照片并试图检测出来:

import zbar
from PIL import Image 

scanner = zbar.ImageScanner()
pil = Image.open('20180520_170027_2.jpg').convert('L')
width, height = pil.size
raw = pil.tobytes()
image = zbar.Image(width, height, 'Y800', raw)
result = scanner.scan(image)

for symbol in image:
    print symbol.data.decode(u'utf-8')     # 1639

即使QR码的尺寸很小(~1x1 cm)也很有用,这很棒!

问题:如何获取QR码角落的x,y位置?

确定zbar 内部此信息(必须能够解码QR码!),但如何访问它?

注意:Windows和Python 2.7上的here is how to install zbar

enter image description here

2 个答案:

答案 0 :(得分:1)

看起来zlib的C ++文档中的zbar::Symbol类有方法get_location_x()get_location_y()get_location_size(),所以你直觉知道这些数据存在于下面是正确的

回到Python,在阅读zbar Python绑定的documentation时,看起来position字段可用于获取QR码的位置:

import zbar
image = read_image_into_numpy_array(...) # whatever function you use to read an image file into a numpy array
scanner = zbar.Scanner()
results = scanner.scan(image)
for result in results:
    print(result.type, result.data, result.quality, result.position)

QR码的大小可能也可以作为result中的字段(例如result.size)使用,您可以使用它来查找其他3个角落。

答案 1 :(得分:0)

正如评论中的暗示所示,

print(symbol.location)

给出坐标。