基于OpenCV的二维码识别与创建:图像算法、Python与GUI界面的实时生成与识别功能
基于opencv二维码的识别与创建图像算法pythongui界面具有生成二维码功能图片视频和摄像头实时识别功能最近在折腾二维码相关的项目发现OpenCV自带的二维码识别模块比想象中好用。直接上实战吧咱们用Python搭个既能生成二维码又能识别各种来源的GUI工具代码量控制在300行内就能实现。先搞个生成二维码的模块。用qrcode库三行代码就能生成基础二维码import qrcode def create_qr(content, save_path): qr qrcode.QRCode( version1, error_correctionqrcode.constants.ERROR_CORRECT_L, box_size10, border4, ) qr.add_data(content) qr.make(fitTrue) img qr.make_image(fill_colorblack, back_colorwhite) img.save(save_path)这里有个坑要注意的是error_correction参数设置纠错等级直接关系到二维码破损后的识别能力。实测当设置为L级别时即使缺失15%的图案仍能正常读取。识别部分用OpenCV的QRCodeDetector就完事了。核心代码比生成还简单import cv2 def decode_image(img_path): img cv2.imread(img_path) detector cv2.QRCodeDetector() data, bbox, _ detector.detectAndDecode(img) return data if bbox is not None else 重点在detectAndDecode这个方法返回值中的bbox保存了二维码四个角的坐标。这个坐标信息在实时检测时非常有用可以用它画出二维码的边界框。基于opencv二维码的识别与创建图像算法pythongui界面具有生成二维码功能图片视频和摄像头实时识别功能GUI界面用Tkinter搭个基础框架布局分成左右两栏。左边放输入控件右边用Canvas显示图像。关键是要处理好不同来源的识别切换from tkinter import * import tkinter.filedialog as fd class QRApp: def __init__(self): self.window Tk() self.source_type 0 # 0:图片 1:视频 2:摄像头 self.setup_ui() def setup_ui(self): self.canvas Canvas(self.window, width640, height480) self.canvas.pack(sideRIGHT) # 功能按钮 Button(self.window, text选择图片, commandself.load_image).pack() Button(self.window, text摄像头识别, commandself.cam_mode).pack()实时摄像头识别需要单独开线程处理否则界面会卡死。这里用OpenCV的VideoCapture配合Tkinter的after方法实现def cam_mode(self): self.cap cv2.VideoCapture(0) self.update_frame() def update_frame(self): ret, frame self.cap.read() if ret: # 识别并绘制边界框 data, bbox self.decode_frame(frame) if bbox is not None: pts bbox.astype(int).reshape(-1,2) cv2.polylines(frame, [pts], True, (0,255,0), 3) # 转换色彩空间并在Canvas显示 img cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) self.show_image(img) if self.source_type 2: # 持续更新 self.window.after(10, self.update_frame)视频文件识别和摄像头共用同一套处理逻辑只是数据源换成VideoCapture的文件路径。实测1080p视频在i5处理器上能达到每秒30帧的处理速度足够实时需求。遇到的两个典型坑点一是摄像头画面镜像问题需要水平翻转二是当多个二维码同时出现时detectAndDecode只能识别其中一个。后者可以通过调整detector的版本解决——OpenCV 4.5版本支持多二维码检测。最后说下实际应用中的优化方向1. 添加历史记录功能自动保存识别过的内容2. 生成二维码时支持logo嵌套3. 对低光照环境下的识别做直方图均衡化处理。这些扩展都不难实现留给有兴趣的朋友自行开发吧。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2443535.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!