Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中用于QR检测的图像预处理_Python_Image Processing_Qr Code_Zbar - Fatal编程技术网

python中用于QR检测的图像预处理

python中用于QR检测的图像预处理,python,image-processing,qr-code,zbar,Python,Image Processing,Qr Code,Zbar,我使用Zbar和OpenCV读取下图中的二维码,但两者都未能检测到。对于ZBar,我使用pyzbar库作为python包装器。有些图像可以正确检测到QR,有些图像与成功检测到的失败图像非常相似。我的手机摄像头可以读取上传图像中的二维码,这意味着它是一个有效的二维码。下面是代码片段: from pyzbar.pyzbar import decode from pyzbar.pyzbar import ZBarSymbol import cv2 # zbar results = decod

我使用Zbar和OpenCV读取下图中的二维码,但两者都未能检测到。对于ZBar,我使用pyzbar库作为python包装器。有些图像可以正确检测到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)
什么类型的预处理将有助于提高检测二维码的成功率

zbar会进行一些预处理,但不会检测到QR码,您可以在运行zbarimg image.jpg时对其进行测试

好的二值化在这里很有用。我用海怪图书馆的功能得到了这个。该库用于OCR,但通过使用非线性处理,也可以很好地用于QR码。Kraken二值化代码是

以下是示例的代码:

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])
下图显示了二维码二值化后的清晰图像:

zbar会进行一些预处理,但不会检测到QR码,您可以在运行zbarimg image.jpg时对其进行测试

好的二值化在这里很有用。我用海怪图书馆的功能得到了这个。该库用于OCR,但通过使用非线性处理,也可以很好地用于QR码。Kraken二值化代码是

以下是示例的代码:

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])
下图显示了二维码二值化后的清晰图像:


我有一个类似的问题,Seanpue的回答让我找到了解决这个问题的正确途径。因为我已经在使用OpenCV库进行图像处理,而不是PIL,所以我使用它来执行大津大学的二值化,使用图像中的方向。这是我的密码:

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

image_path = "qr.jpg"
# preprocessing using opencv
im = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)
blur = cv2.GaussianBlur(im, (5, 5), 0)
ret, bw_im = cv2.threshold(blur, 0, 255, cv2.THRESH_BINARY+cv2.THRESH_OTSU)
# zbar
decode(bw_im, symbols=[ZBarSymbol.QRCODE])

应用高斯模糊应该可以去除图片中的噪声,从而使二值化更加有效,但对于我的应用来说,它实际上没有多大区别。至关重要的是将图像转换为灰度,通过打开带有cv2.IMREAD\u灰度标志的文件,使阈值功能在此工作。

我也遇到了类似的问题,Seanpue的回答让我正确地解决了这个问题。因为我已经在使用OpenCV库进行图像处理,而不是PIL,所以我使用它来执行大津大学的二值化,使用图像中的方向。这是我的密码:

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

image_path = "qr.jpg"
# preprocessing using opencv
im = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)
blur = cv2.GaussianBlur(im, (5, 5), 0)
ret, bw_im = cv2.threshold(blur, 0, 255, cv2.THRESH_BINARY+cv2.THRESH_OTSU)
# zbar
decode(bw_im, symbols=[ZBarSymbol.QRCODE])

应用高斯模糊应该可以去除图片中的噪声,从而使二值化更加有效,但对于我的应用来说,它实际上没有多大区别。重要的是将图像转换为灰度,通过打开带有cv2.IMREAD_grayscale标志的文件,使阈值功能在此工作。

除此之外,我发现我必须缩小所讨论的图像。4000x3000的相机照片似乎存在问题,但当缩放到1600x1200宾果时!除此之外,我发现我不得不缩小所讨论的图像。4000x3000的相机照片似乎存在问题,但当缩放到1600x1200宾果时!这在这方面也很有用:这在这方面也很有用: