python 我怎么能通过图像本身(np数组),而不是路径,它到zxing库解码pdf417

vsikbqxv  于 2023-01-12  发布在  Python
关注(0)|答案(4)|浏览(199)

代码:

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)

当我使用上面的代码工作正常,并返回结果:条形码(原始='P〈E ....
我需要使用此代码:

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)

但是这段代码返回一个错误:TypeError:应为字符串、字节或操作数。PathLike对象,而不是numpy.ndarray
在另一个程序中,我在base64的图像可以帮助我在这里的某个地方?
有人能帮我吗

yi0zb3m4

yi0zb3m41#

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.")
pengsaosao

pengsaosao2#

如果你看一下源代码,你会发现它所做的是用提供的路径调用一个java应用程序(具体来说是com.google.zxing.client.j2se.CommandLineRunner)。
如果你需要预处理你的图像,那么你将不得不把它保存在某个地方,并把它的路径传递给你的库

hgqdbh6s

hgqdbh6s3#

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

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)
roqulrg3

roqulrg34#

zxing不推荐使用,它只是一个调用Java ZXing库的命令行工具。
应该使用zxing-cpp,这是用中兴C++代码构建的Python模块,下面是示例代码:

import cv2
import zxingcpp

img = cv2.imread('myimage.png')
results = zxingcpp.read_barcodes(img)
for result in results:
    print("Found barcode:\n Text:    '{}'\n Format:   {}\n Position: {}"
        .format(result.text, result.format, result.position))
if len(results) == 0:
    print("Could not find any barcode.")

相关问题