如何使用zbar在图像上获取检测到的QR码的x,y位置?
Posted
技术标签:
【中文标题】如何使用zbar在图像上获取检测到的QR码的x,y位置?【英文标题】:How to get the x, y position of a detected QR code on an image with zbar? 【发布时间】:2018-10-30 09:02:45 【问题描述】:我在下图的两个二维码中编码了数字 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 厘米),它也能正常工作,这很棒!
问题:如何获取二维码角的x、y位置?
确定zbar
内部有此信息(必须能够解码二维码!),但是如何访问它?
注意:here is how to install zbar
在 Windows 和 Python 2.7 上
【问题讨论】:
你试过dir(symbol)
吗?
【参考方案1】:
正如评论中的提示所建议的那样,
print(symbol.location)
给出坐标。
【讨论】:
【参考方案2】:看起来 zlib 的 C++ 文档中的 zbar::Symbol
类具有 get_location_x()
、get_location_y()
和 get_location_size()
方法,因此您认为这些数据存在于底层的直觉是正确的。
回到 Python,在读取 zbar Python 绑定的documentation 时,似乎有一个position
字段可用于获取二维码的位置:
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)
二维码的大小可能也可以作为result
中的一个字段(例如result.size
),您可以使用它来查找其他3个角。
【讨论】:
以上是关于如何使用zbar在图像上获取检测到的QR码的x,y位置?的主要内容,如果未能解决你的问题,请参考以下文章
在 Python 中将 openCV 图像转换为 PIL 图像(用于 Zbar 库)
我需要检测扫描图像中 QR 码的大致位置(PDF 转换为 PNG)
如何使用 mask-RCNN 在 python 中计算(x,y)(质心)和掩码的宽度和高度?