我如何将图像本身而不是它的路径传递给 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.")
代码:
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 我需要使用这个代码: 但是这段代码 return 出错了:
类型错误:应为 str、字节或 os.PathLike 对象,而不是 numpy.ndarray 在另一个程序中,我有 base64 图像可以帮助我吗? 任何人都可以帮助我吗?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)
你不能。如果您查看 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.")