博舍

python二维码生成与识别 二维码生成能用多久

python二维码生成与识别

目录pip库安装相关概念代码pip库安装

首先需要安装pil库,qrcode库和opencv库

>pipinstallPillow-ihttps://pypi.mirrors.ustc.edu.cn/simple>pipinstallqrcode-ihttps://pypi.mirrors.ustc.edu.cn/simple>pipinstallpyzbar-ihttps://pypi.mirrors.ustc.edu.cn/simple>pipinstallopencv-python相关概念

QRcode是一种矩阵式二维条码(又称棋盘式二维条码)。它是在一个矩形空间通过黑、白像素在矩阵中的不同分布进行编码。在矩阵相应元素位置上,用点(方点、圆点或其他形状)的出现表示二进制“1”,点的不出现表示二进制的“0”,点的排列组合确定了矩阵式二维条码所代表的意义。但是二维码是怎么生成的呢,我们知道,计算机只能识别0和1这两个数,所以要存储在二维码的信息,计算机会将这些字符都同一转变为0和1组成的二进制数字序列,这个转化的过程叫做编码。字符在变成只有0和1组成的数字序列后,在进行一系列优化算法后,就得到了最终的二进制编码。在最后这串编码中,一个0对应的就是一个白色小方块,一个1对应的就是一个黑色的小方块。我们把这些小方块按照8个一组,填进大方块里,这就是一个完整的,可以被手机相机识别的二维码图案了。

相比较于条形码,二维条码有一维条码没有的“定位点”和“容错机制”。不知大家有没有发现,所有的二维码都有三个小方块在边上。其实这三个方块是用来定位的,但为什么是三个呢,简单说就是三点确定一个面。如果只有一个点,经过这个点有无数个方框,两个点,有两个方框,因此就设了三个方块。所以不管你正着扫、倾斜扫、旋转180度扫,都能识别出来。”容错机制“就是在即使没有辨识到全部的条码、或是说条码有污损时,也可以正确地还原条码上的信息。

代码

生成二维码文件:

#coding=gbkimportqrcodefromPILimportImagedefmake_qr_code_with_icon(content,icon_path=None,save_path=None):qr=qrcode.QRCode(version=1,error_correction=qrcode.constants.ERROR_CORRECT_H,box_size=5,border=4)qr.add_data(content)qr.make(fit=True)img=qr.make_image(fill_color=(213,143,1),back_color="white")ificon_path:icon=Image.open("snake.png")#用于填充的图片img_w,img_h=img.sizefactor=4size_w=int(img_w/factor)size_h=int(img_h/factor)icon_w,icon_h=icon.sizeificon_w>size_w:icon_w=size_wificon_h>size_h:icon_h=size_hicon=icon.resize((icon_w,icon_h),Image.LANCZOS)w=int((img_w-icon_w)/2)h=int((img_h-icon_h)/2)img.paste(icon,(w,h),icon)ifsave_path:img.save(save_path)#保存二维码图片img.show()else:img.show()make_qr_code_with_icon("我是文化界","snake.png","whj.png")

生成图片效果:读取二维码信息:

importcv2importnumpyasnpimportpyzbar.pyzbaraspyzbarsrc=cv2.imread("whj.png")gray=cv2.cvtColor(src,cv2.COLOR_BGR2GRAY)qrcoder=cv2.QRCodeDetector()codeinfo,points,straight_qrcode=qrcoder.detectAndDecode(gray)result=np.copy(src)cv2.drawContours(result,[np.int32(points)],0,(0,0,255),2)print("qrcodeinformationis: %s"%codeinfo)cv2.imshow("result",result)cv2.imshow("qrcoderoi",np.uint8(straight_qrcode))cv2.waitKey(0)cv2.destroyAllWindows()

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

上一篇

下一篇