如何使用OpenCV批量解码文件夹内多张图片的条形码
代码修改方案
核心修改点
- 引入
os模块读取指定文件夹内的所有图片路径,原代码直接遍历路径字符串属于逻辑错误 - 移除无用的摄像头调用相关注释代码,删除死循环
while True避免程序卡住 - 调整
cv2.waitKey参数,设置每张识别结果固定显示时长后自动切换,无需手动按ESC关闭窗口 - 所有图片处理完成后自动销毁所有OpenCV窗口
修改后完整代码
import cv2 import numpy as np from pyzbar.pyzbar import decode import os # 指定图片文件夹路径 folder_path = r'\QrCodeBarCode\Images' # 支持的图片格式,可按需添加 img_suffix = ('.png', '.jpg', '.jpeg', '.bmp') # 遍历文件夹下所有图片 for filename in os.listdir(folder_path): if filename.lower().endswith(img_suffix): img_path = os.path.join(folder_path, filename) img = cv2.imread(img_path) # 条码识别逻辑 for barcode in decode(img): myData = barcode.data.decode('utf-8') # 打印识别结果和对应文件名,方便对应 print(f"文件名:{filename},识别结果:{myData}") pts = np.array([barcode.polygon],np.int32) pts = pts.reshape((-1,1,2)) cv2.polylines(img,[pts],True,(255,0,255),5) pts2 = barcode.rect cv2.putText(img,myData,(pts2[0],pts2[1]),cv2.FONT_HERSHEY_SIMPLEX, 0.9,(0,255,0),2) # 显示识别结果 cv2.imshow('Result',img) # 每张图片显示1000毫秒(1秒)后自动切换,可按需调整时长 cv2.waitKey(1000) # 所有图片处理完成后自动关闭所有窗口 cv2.destroyAllWindows()
补充说明
如果不需要显示每张图片的识别结果,只需要输出识别数据,可以直接删掉cv2.imshow、cv2.waitKey、cv2.destroyAllWindows相关代码,运行速度会更快。
内容的提问来源于stack exchange,提问作者levi_ackerman
相关产品推荐
相关产品推荐

