我一直在尝试使用Python和pyzbar从图像中读取一些条形码。不幸的是,这些图像是在几英尺外以及多种限制下拍摄的,我无法将相机移动或放大。是否有可能使用任何现有的Python库读取这样模糊的条形码?
到目前为止,我尝试过一些预处理方法,包括阈值处理、锐化、应用垂直闭合滤波器和维纳滤波等,但都没有起到帮助的作用。我可能在求奇迹,但如果你有任何建议,我会非常感激。
代码(注释部分是我尝试过但没有成功的预处理方法):
import numpy as np
import cv2 as cv
from pyzbar import pyzbar
barcode_img = cv.imread('barcode_example.jpg', cv.IMREAD_GRAYSCALE)
# threshold
# (_, barcode_img) = cv.threshold(barcode_img, 0, 255, cv.THRESH_BINARY + cv.THRESH_OTSU)
# close
# barcode_img = cv.morphologyEx(barcode_img, cv.MORPH_CLOSE,
# cv.getStructuringElement(cv.MORPH_RECT, (1, 21)))
# sharpen
# barcode_img_blur = cv.GaussianBlur(barcode_img, (15, 1), 3)
# barcode_img = cv.addWeighted(barcode_img, 1.5, barcode_img_blur, -0.5, 0)
# wiener filter
# from skimage import img_as_float
# from skimage.restoration import wiener, unsupervised_wiener
# dim = 3
# psf = np.ones((dim, dim)) / dim ** 2
# barcode_img = wiener(barcode_img, psf, 1.0, clip=False)
barcodes = pyzbar.decode(barcode_img)
print(barcodes)