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码,建议识别之前,尝试使用高斯滤波去噪或其他滤波、转灰度图解码、二值化、缩放图片的大小比例(支付宝扫码时,有时候镜头远离更快扫出来,一个道理。)等图片预处理操作,能更好更快的识别出结果,有些原本不能识别的,经过图片预处理后,就能识别了。另外,通过增加滤波核的大小,有时候也能提高识别率。
若存在不足或错误之处,欢迎指正与评论。