我如何将图像本身而不是它的路径传递给 zxing 库以解码 pdf417

How can i pass image itself not path of it to zxing library for decode pdf417

代码:

import zxing
from PIL import Image

reader = zxing.BarCodeReader()
path = 'C:/Users/UI UX/Desktop/Uasa.png'
im = Image.open(path)

barcode = reader.decode(path)
print(barcode)

当我使用上面的代码工作正常并且 return 结果: 条码(raw='P

我需要使用这个代码:

import zxing
import cv2

reader = zxing.BarCodeReader()
path = 'C:/Users/UI UX/Desktop/Uasa.png'

img = cv2.imread (path)
cv2.imshow('img', img)
cv2.waitKey(0)

barcode = reader.decode(img)
print(barcode)

但是这段代码 return 出错了: 类型错误:应为 str、字节或 os.PathLike 对象,而不是 numpy.ndarray

在另一个程序中,我有 base64 图像可以帮助我吗?

任何人都可以帮助我吗?

你不能。如果您查看 source code,您会发现它所做的是使用提供的路径(具体为 com.google.zxing.client.j2se.CommandLineRunner)调用 java 应用程序。

如果您需要预处理图像,则必须将其保存在某处并将其路径传递给您的库

我通过以下方式解决此问题:

path = os.getcwd()
# print(path)
writeStatus = cv2.imwrite(os.path.join(path, 'test.jpg'), pdf_image)
if writeStatus is True:
    print("image written")
else:
    print("problem")  # or raise exception, handle problem, etc.
sss = (os.path.join(path, 'test.jpg'))
# print(sss)
pp = sss.replace('\', '/')
# print(pp)
reader = zxing.BarCodeReader()
barcode = reader.decode(pp)

ZXing 不支持直接传递图片,因为它使用外部应用程序处理条形码图片。如果您不习惯使用 ZXing 库来解码 PDF417 条形码,您可以查看 PyPI 包 pdf417decoder.

如果您像示例中那样从 Numpy 数组开始,那么您必须先将其转换为 PIL 图像。

import cv2
import pdf417decoder
from PIL import Image

npimg = cv2.imread (path)
cv2.imshow('img', npimg)
cv2.waitKey(0)

img = Image.fromarray(npimg)
decoder = PDF417Decoder(img)

if (decoder.decode() > 0):
    print(decoder.barcode_data_index_to_string(0))
else:
    print("Failed to decode barcode.")