QR与DM码的识别

1.QR码与DM码

  QR码(Quick Response Code)是一种矩阵条码,能够快速被扫描设备识别。它是由日本Denso Wave公司在1994年发明的,用于追踪汽车零件。QR码可以存储更多的数据,并且可以包含文本、URL、图片等信息。QR码的特点是快速识别,因此得名。它们广泛应用于广告、产品追踪、票务系统、移动支付等领域。

  DM码(Data Matrix Code)也是一种矩阵条码,但与QR码相比,它具有更高的数据密度,可以在更小的空间内存储更多的信息。DM码是由美国国际数据公司(International Data Matrix, Inc.)在1980年代末发明的。DM码通常用于电子行业、汽车行业、医疗行业等,用于追踪和识别产品。

2. QR码识别

 

from pyzbar.pyzbar import decode
import cv2
image = cv2.imread("QR.png")
decoded_objects = decode(image)
print("decoded_objects=",decoded_objects)
'''
[Decoded(data=b'55065000874C032310180D704', type='QRCODE', 
rect=Rect(left=23, top=27, width=196, height=191), 
polygon=[Point(x=23, y=32), Point(x=28, y=218), Point(x=219, y=213), Point(x=214, y=27)], 
quality=1, orientation='UP')]
'''
for obj in decoded_objects:
    print('Type:', obj.type)#QRCODE
    print('Data:', obj.data)#b'55065000874C032310180D704'
    byte_string=obj.data
    # 使用 decode 方法将字节串转换为字符串(使用 UTF-8 编码)
    string_result = byte_string.decode('utf-8')
    # 打印结果
    print(string_result)#55065000874C032310180D704

 

3.DM码识别

import cv2
from pylibdmtx.pylibdmtx import decode

# 使用OpenCV读取图像
image_path = 'DM.png'
image = cv2.imread(image_path)
# 转换图像到灰度格式
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
decoded_objects = decode(gray_image,timeout=200)#timeout为解码最长时间,时间越长,解码出来的可能性更高
print(decoded_objects)#例如[Decoded(data=b'B940124938K0077421B01', rect=Rect(left=125, top=573, width=454, height=-458))]#left=125, top=573为二维码左下角点坐标,所以height<0

  下面的DM图中,直接运行代码可能无法识别出,太模糊了,需要预处理图片。

 小结:上面的例子中是最基本的程序识别,可能存在无法识别的情况。自己尝试了支付宝后,发现效果很好。最后,补充一下,无论是QR还是DM码,建议识别之前,尝试使用高斯滤波去噪或其他滤波、转灰度图解码、二值化、缩放图片的大小比例(支付宝扫码时,有时候镜头远离更快扫出来,一个道理。)等图片预处理操作,能更好更快的识别出结果,有些原本不能识别的,经过图片预处理后,就能识别了。

  

  若存在不足或错误之处,欢迎指正与评论。

 

posted @ 2024-06-29 15:10  wancy  阅读(26)  评论(0编辑  收藏  举报