使用pyzbar无法读取同一图像文件中的第二个条形码

时间:2018-10-01 22:21:31

标签: python python-2.7 barcode

我正在用Python 2.7进行编码,我需要实现一个过程,在该过程中,我将读取PDF,然后获取文档第一页的图像,然后从包含两个条形码的图像中获取两个值。到目前为止,这是我到目前为止一直在努力的两个功能(在将其移至环境之前,我需要做很多工作):

Python流程,可从教程中的PDF获取图像:

from wand.image import Image as wi
pdf = wi(filename="test.pdf", resolution=300)
pdfImageTest = pdf.convert("png")
i=1
for img in pdfImage.sequence:
  page = wi
  (image = img)
  page.save(filename="test"+str(i)+".png")
  i+=1

Python进程从图像中读取条形码:

from pyzbar.pyzbar import decode
from PIL import Image
import cv2
import numpy

decodedObjects = decode(Image.open('test2.png'))
obj = decodedObjects
print(obj)
decodedObjects = decode(cv2.imread('test2.png'))
print(obj)

根据pyzbar中有关解码功能的文档,该功能将扫描图像中包含的所有条形码,但是到目前为止,对于我所使用的两种情况,我只获得图像中的第一个条形码。在完成对第一张图像的处理之后,是否可以强制该功能继续扫描图像或将其指向图像的特定位置?

1 个答案:

答案 0 :(得分:2)

您应该使用obj.data并遍历所有对象。 这是一个示例:

from pyzbar.pyzbar import decode
from PIL import Image
import cv2
import numpy

decodedObjects = decode(Image.open('test2.png'))
obj = decodedObjects
for bar in obj:
  print(bar.data)

顺便说一句,print语句在Python 3中被print()函数所取代。因此,如果您严格希望使用Python 2.7,则应使用例如print bar.data