预处理图像以在python中进行QR检测

问题描述 投票:-1回答:1

我使用Zbar和OpenCV读取下图中的QR码,但都无法检测到。对于ZBar,我将pyzbar库用作python包装器。有些图像可以正确检测到QR,而图像与失败的图像确实非常相似。我的手机摄像头可以读取上载图像中的QR码,这意味着它是有效的。下面是代码片段:

from pyzbar.pyzbar import decode
from pyzbar.pyzbar import ZBarSymbol
import cv2

# zbar    
results = decode(cv2.imread(image_path), symbols=[ZBarSymbol.QRCODE])
print(results) 

# opencv
qr_decoder = cv2.QRCodeDetector()
data, bbox, rectified_image = qr_decoder.detectAndDecode(cv2.imread(image_path))
print(data, bbox)

哪种类型的预处理将有助于提高检测QR码的成功率?

the image attached

python image-processing qr-code zbar
1个回答
0
投票

zbar,它进行了一些预处理,未检测到可以测试运行中的zbarimg image.jpg的QR码。

Good binarization在这里很有用。我使用Kraken库的kraken.binarization.nlbin()函数使它起作用。该库适用于OCR,但通过使用非线性处理,也适用于QR码。 Kraken二值化代码为kraken.binarization.nlbin()

这里是示例代码:

here

from kraken import binarization
from PIL import Image
from pyzbar.pyzbar import decode
from pyzbar.pyzbar import ZBarSymbol

image_path = "image.jpg"
# binarization using kraken
im = Image.open(image_path)
bw_im = binarization.nlbin(im)
# zbar
decode(bw_im, symbols=[ZBarSymbol.QRCODE])

下图显示了二值化后的QR码的清晰图像:

[Decoded(data=b'DE-AAA002065', type='QRCODE', rect=Rect(left=1429, top=361, width=300, height=306), polygon=[Point(x=1429, y=361), Point(x=1429, y=667), Point(x=1729, y=667), Point(x=1723, y=365)])]

© www.soinside.com 2019 - 2024. All rights reserved.