Как получить положение x, y обнаруженного QR-кода на изображении с помощью zbar? - PullRequest
0 голосов
/ 20 мая 2018

Я кодировал число 1639 в двух QR-кодах на изображении ниже (можно загрузить здесь ).Я распечатал его, сделал фотографию и попытался ее обнаружить:

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 углов QR-кодов?

Уверен, что zbar имеет эту информацию внутри (обязательно дляУметь декодировать QR-код!), но как получить к нему доступ?

Примечание: вот как установить zbar на Windows и Python 2.7

enter image description here

Ответы [ 2 ]

0 голосов
/ 20 мая 2018

Похоже, класс zbar::Symbol в C ++ документах zlib имеет методы get_location_x(), get_location_y() и get_location_size(), поэтому ваша интуиция, что эти данные существуют снизу, была правильной.

Возвращаясь к Python, при чтении документации привязки zbar Python, похоже, что поле 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 других угла.

0 голосов
/ 20 мая 2018

Как подсказывает подсказка в комментарии,

print(symbol.location)

дает координаты.

...