我正在按照本教程使用 OpenCV 读取条形码和 QR 码。下面的代码可以工作并检测 QR 条形码,但我想使用条形码检测器来读取商店产品上的条形码,如下所示
如果条形码整齐地打印在白纸上或显示在大计算机屏幕上,则此代码有效。
import cv2
import numpy as np
from pyzbar.pyzbar import decode
cap = cv2.VideoCapture(0)
cap.set(3,640)
cap.set(4,480)
while True:
success, img = cap.read()
for barcode in decode(img):
myData = barcode.data.decode('utf-8')
print(myData)
if myData in myDataList:
myOutput = 'Authorized'
myColor = (0,255,0)
else:
myOutput = 'Un-Authorized'
myColor = (0, 0, 255)
pts = np.array([barcode.polygon],np.int32)
pts = pts.reshape((-1,1,2))
cv2.polylines(img,[pts],True,myColor,5)
pts2 = barcode.rect
cv2.putText(img,myOutput,(pts2[0],pts2[1]),cv2.FONT_HERSHEY_SIMPLEX,
0.9,myColor,2)
cv2.imshow('Result',img)
cv2.waitKey(1)
如何修复代码或使用其他方法来准确读取货架产品上的条形码?
您可以执行销售点扫描仪的操作:使用许多不同方向的线扫描产品,并查看这些线中的任何内容是否可以可靠地解码。
条形码具有特定的时序限制(边缘之间的时间/距离不能是任意的),并且它们包含校验和。这就是您或 zbar 可以丢弃在任意位置穿过对象的扫描线的方式。您不必知道条形码在哪里。
您可以跨不同的线对图像进行采样,并将这些样本提供给 zbar 的低级接口,该接口每次扫描都会获取一系列强度值。