我在下面图片的两个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
答案 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)
给出坐标。