您的位置:首页 > 房产 > 家装 > 凡客网上购物_seo研究中心官网_网上教育培训机构_中国seo公司

凡客网上购物_seo研究中心官网_网上教育培训机构_中国seo公司

2025/5/6 9:07:48 来源:https://blog.csdn.net/qq_23488347/article/details/143457904  浏览:    关键词:凡客网上购物_seo研究中心官网_网上教育培训机构_中国seo公司
凡客网上购物_seo研究中心官网_网上教育培训机构_中国seo公司
概述

在现代社会,二维码和条码的应用非常广泛,从商品标签到支付二维码,几乎无处不在。本文将详细介绍如何使用 OpenCV 和 Pyzbar 库在 Python 中检测并识别二维码和条码,并通过具体的代码示例来展示整个过程。

环境准备

在开始之前,请确保已经安装了所需的库。可以通过以下命令进行安装:

pip install opencv-python pyzbar
完整示例代码详解
import cv2
import numpy as np
from pyzbar import pyzbarclass CodeFinder:"""二维码、条码检测"""def __init__(self):"""初始化摄像头并设置分辨率"""self.cap = cv2.VideoCapture(0)  # 打开默认摄像头self.cap.set(3, 640)  # 设置视频宽度为640像素self.cap.set(4, 480)  # 设置视频高度为480像素def run(self):"""捕获视频并检测二维码和条码"""while True:success, img = self.cap.read()  # 读取一帧视频if not success:print("Failed to read frame")break# 检测图像中的二维码和条码for bar_code in pyzbar.decode(img):# 解码二维码数据print(bar_code.data.decode('utf8'))  # 打印二维码数据print(bar_code.type)  # 打印二维码类型print(bar_code.rect)  # 打印二维码四周边界(矩形框)print(bar_code.polygon)  # 打印二维码多边形边框print(bar_code.quality)  # 打印二维码质量print(bar_code.orientation)  # 打印二维码方向# 绘制二维码边界points = np.array(bar_code.polygon, np.int32)points = points.reshape((-1, 1, 2))cv2.polylines(img=img, pts=[points], isClosed=True, color=(0, 0, 255), thickness=3)# 在图像上显示二维码数据cv2.putText(img=img,text=bar_code.data.decode('utf8'),org=(bar_code.rect.left, bar_code.rect.top),fontFace=cv2.FONT_HERSHEY_SIMPLEX,fontScale=0.8,color=(0, 0, 255),thickness=2)# 显示图像cv2.imshow('code', img)# 按下 'q' 键退出循环if cv2.waitKey(1) & 0xFF == ord('q'):self.cap.release()  # 释放摄像头资源cv2.destroyAllWindows()  # 关闭所有OpenCV窗口breakif __name__ == '__main__':code_finder = CodeFinder()code_finder.run()
代码解析
1. 导入必要的库
import cv2
import numpy as np
from pyzbar import pyzbar
  • cv2:OpenCV 的 Python 接口,用于图像和视频处理。
  • numpy:用于处理图像数据的数组。
  • pyzbar:用于解码二维码和条码的库。
2. 定义 CodeFinder
class CodeFinder:"""二维码、条码检测"""def __init__(self):"""初始化摄像头并设置分辨率"""self.cap = cv2.VideoCapture(0)  # 打开默认摄像头self.cap.set(3, 640)  # 设置视频宽度为640像素self.cap.set(4, 480)  # 设置视频高度为480像素
  • 初始化摄像头
    • self.cap = cv2.VideoCapture(0):打开默认摄像头(ID 为 0)。
    • self.cap.set(3, 640):设置视频宽度为 640 像素。
    • self.cap.set(4, 480):设置视频高度为 480 像素。
3. 定义 run 方法
def run(self):"""捕获视频并检测二维码和条码"""while True:success, img = self.cap.read()  # 读取一帧视频if not success:print("Failed to read frame")break# 检测图像中的二维码和条码for bar_code in pyzbar.decode(img):# 解码二维码数据print(bar_code.data.decode('utf8'))  # 打印二维码数据print(bar_code.type)  # 打印二维码类型print(bar_code.rect)  # 打印二维码四周边界(矩形框)print(bar_code.polygon)  # 打印二维码多边形边框print(bar_code.quality)  # 打印二维码质量print(bar_code.orientation)  # 打印二维码方向# 绘制二维码边界points = np.array(bar_code.polygon, np.int32)points = points.reshape((-1, 1, 2))cv2.polylines(img=img, pts=[points], isClosed=True, color=(0, 0, 255), thickness=3)# 在图像上显示二维码数据cv2.putText(img=img,text=bar_code.data.decode('utf8'),org=(bar_code.rect.left, bar_code.rect.top),fontFace=cv2.FONT_HERSHEY_SIMPLEX,fontScale=0.8,color=(0, 0, 255),thickness=2)# 显示图像cv2.imshow('code', img)# 按下 'q' 键退出循环if cv2.waitKey(1) & 0xFF == ord('q'):self.cap.release()  # 释放摄像头资源cv2.destroyAllWindows()  # 关闭所有OpenCV窗口break
  • 读取视频帧

    • success, img = self.cap.read():读取一帧视频。success 表示是否成功读取,img 是读取到的图像。
    • 如果读取失败,打印错误信息并退出循环。
  • 检测二维码和条码

    • for bar_code in pyzbar.decode(img):使用 pyzbar.decode() 函数检测图像中的二维码和条码。
    • print(bar_code.data.decode('utf8')):打印二维码数据。
    • print(bar_code.type):打印二维码类型。
    • print(bar_code.rect):打印二维码四周边界(矩形框)。
    • print(bar_code.polygon):打印二维码多边形边框。
    • print(bar_code.quality):打印二维码质量。
    • print(bar_code.orientation):打印二维码方向。
  • 绘制二维码边界

    • points = np.array(bar_code.polygon, np.int32):将二维码多边形边框转换为 NumPy 数组。
    • points = points.reshape((-1, 1, 2)):重塑数组形状。
    • cv2.polylines(img=img, pts=[points], isClosed=True, color=(0, 0, 255), thickness=3):使用 cv2.polylines() 函数绘制多边形边框。
  • 在图像上显示二维码数据

    • cv2.putText():在图像上显示二维码数据。
    • text=bar_code.data.decode('utf8'):要显示的文本内容。
    • org=(bar_code.rect.left, bar_code.rect.top):文本的起始位置。
    • fontFace=cv2.FONT_HERSHEY_SIMPLEX:使用的字体类型。
    • fontScale=0.8:字体大小。
    • color=(0, 0, 255):文本颜色。
    • thickness=2:文本线宽。
  • 显示图像

    • cv2.imshow('code', img):显示图像。
  • 按键检测

    • if cv2.waitKey(1) & 0xFF == ord('q'):等待1毫秒,如果有按键按下,返回按键的ASCII码。ord('q') 返回字符 ‘q’ 的ASCII码。如果按键为 ‘q’,则退出循环。
    • self.cap.release():释放摄像头资源。
    • cv2.destroyAllWindows():关闭所有OpenCV窗口。
4. 主函数
if __name__ == '__main__':code_finder = CodeFinder()code_finder.run()
  • 主函数
    • if __name__ == '__main__'::确保当脚本直接运行时才执行以下代码。
    • 创建 CodeFinder 对象并调用 run 方法来启动二维码和条码检测。
总结

本文详细介绍了如何使用 OpenCV 和 Pyzbar 库在 Python 中检测并识别二维码和条码,并通过具体的代码示例展示了整个过程。通过使用 cv2.VideoCapture()pyzbar.decode()cv2.polylines()cv2.putText() 等函数,我们可以轻松地处理视频流中的二维码和条码数据。


版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com