OpenCV项目之二维码/条形码检测
2023-12-28 06:35:23
?????????话不多说,先展示效果!
????????今天Franpper给大家带来的条形码与二维码识别,再开始识别之前,先生成一下今天所需要的测试图片。
1、通过barcode库生成条形码
????????Barcode库是一个用于Python的库,它使得生成条形码变得简单。它支持多种条形码格式,包括常见的UPC、EAN、ISBN和QR码。
? ? ? ? 生成条形码的的方法如下:
from barcode.writer import ImageWriter
import barcode
code_save_dir = r'E:\pythonProject\OpenCV\opencv_proj\qrbartest'
barcode_path = os.path.join(code_save_dir, 'barcode')
# 创建条形码格式对象
EAN = barcode.get_barcode_class('code39') # Barcode库支持多种条形码格式,根据需要选择适合的格式
message = "6920231218220" # 条形码内容
# 创建条形码对象
ean = EAN(message, writer=ImageWriter())
# 保存条形码图片,并且返回路径
ean.save(barcode_path)
生成的条形码如下:?
2、 通过qrcode库生成二维码
????????qrcode是一个用于生成二维码的Python库。它简单易用,可以快速生成标准的二维码,同时还支持添加自定义颜色和嵌入图片。
code_save_dir = r'E:\pythonProject\OpenCV\opencv_proj\qrbartest'
qrcode_path = os.path.join(code_save_dir, 'qrcode.png')
qr_image = qrcode.make('https://franpper.blog.csdn.net/')
qr_image.save(qrcode_path)
生成的二维码如下:
将生成的二维码resize并于条形码水平拼接
bar_image = cv2.imread(os.path.join(code_save_dir, 'barcode.png'))
bar_h, bar_w, _ = bar_image.shape
qr_image = cv2.imread(os.path.join(code_save_dir, 'qrcode.png'))
resize_qr = cv2.resize(qr_image, (bar_h, bar_h))
merge_image = cv2.hconcat([resize_qr, bar_image])
合并后如下:
?
3、使用Pyzbar库进行识别
pyzbar的GitHub主页如下
具体的使用方法如下:
for code in decode(merge_image):
data = code.data.decode('utf-8') # 转为UTF-8 编码
pts = np.array([code.polygon], np.int32) # code.polygon 包含了识别到的条形码或二维码的多边形顶点坐标,将这些坐标转换为 NumPy 数组
print(pts)
pts = pts.reshape((-1, 1, 2))
cv2.polylines(merge_image, [pts], True, (0, 255, 0), 5) # 绘制外框
code_box = code.rect
# 将二维码或者条形码的的内容写在图中
cv2.putText(merge_image, data, (code_box[0], code_box[3]), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 0, 255), 2)
cv2.imshow('result', merge_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
输出的图像如下:?
4、使用摄像头进行识别
import cv2
import numpy as np
from pyzbar.pyzbar import decode
cap = cv2.VideoCapture(1)
cap.set(3, 640)
cap.set(4, 480)
while True:
success, frame = cap.read()
if success:
for code in decode(frame):
data = code.data.decode('utf-8')
pts = np.array([code.polygon], np.int32)
print(pts)
pts = pts.reshape((-1, 1, 2))
cv2.polylines(frame, [pts], True, (0, 255, 0), 5)
code_box = code.rect
cv2.putText(frame, data, (code_box[0], code_box[1]), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 0, 255), 2)
cv2.imshow('result', frame)
cv2.waitKey(1)
????????识别之后的效果正如Franpper开头展示的那样,这里就不在展示了。
????????关于条形码、二维码的生成与识别差不多就是这些了,大家一起动手试试吧!
?
文章来源:https://blog.csdn.net/weixin_58283091/article/details/134843134
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!