我正在使用pyzbar通过Pi Camera v1(分辨率1296x972)在Raspberry Pi 3上解码条形码。 Qr码被很好地解码。解码二维条形码(CODABAR)时,成功率非常低。
我尝试从视频流中保存一帧,并在Raspberry上使用pyzbar对其进行解码,但失败了。当我尝试在Ubuntu上解码相同的映像并成功解码时。
from pyzbar import pyzbar
from PIL import Image
img = Image.open('sampleImage.png')
d = pyzbar.decode(img)
print (d)
有没有想到可能是什么问题?
更新:
以下图像是我的特定用例。 因为我正在使用Pi Camera v1拍摄图像,所以尝试对图像的清晰度进行调整:
from picamera import PiCamera
self.camera = PiCamera()
self.camera.sharpness = 100
以下图像的清晰度为100。但是,pyzbar
仍无法在Raspberry Pi上对其进行解码。
答案 0 :(得分:0)
您需要从图像中删除黑色边框。根据{{3}},
您可以简单地裁剪图像,然后将图像提供给pyzbar.decode()
函数。
import cv2
from pyzbar import pyzbar
import numpy as np
def autocrop(image, threshold=0):
"""Crops any edges below or equal to threshold
Crops blank image to 1x1.
Returns cropped image.
"""
if len(image.shape) == 3:
flatImage = np.max(image, 2)
else:
flatImage = image
assert len(flatImage.shape) == 2
rows = np.where(np.max(flatImage, 0) > threshold)[0]
if rows.size:
cols = np.where(np.max(flatImage, 1) > threshold)[0]
image = image[cols[0]: cols[-1] + 1, rows[0]: rows[-1] + 1]
else:
image = image[:1, :1]
return image
if __name__ == "__main__":
image = cv2.imread('sampleImage.png')
crop = autocrop(image, 165)
d = pyzbar.decode(crop)
print(d)