YOLOv8如何将模型输出转为图片并保存以适配EasyOCR?
解决YOLOv8检测结果裁剪保存车牌的方法
你可以通过两种方式实现车牌区域的裁剪与保存,适配后续EasyOCR识别需求:
方法一:使用YOLOv8自带的裁剪保存功能
YOLOv8的Results对象内置了save_crop方法,可直接保存检测到的目标区域,无需手动处理坐标:
from ultralytics import YOLO # 加载模型并执行检测 license_plate_detector = YOLO('./model/best.pt') results = license_plate_detector('./42.jpg') # 保存裁剪后的车牌区域 # 默认保存路径为 runs/detect/exp/crops/[类别名]/ ,也可指定自定义路径 results[0].save_crop(save_dir='./cropped_plates')
执行后,检测到的每张车牌会以单独图片的形式保存在指定文件夹中。
方法二:手动裁剪并保存(更灵活)
如果需要自定义裁剪逻辑或保存格式,可通过提取检测框坐标,结合PIL/OpenCV实现:
方式A:使用PIL库
from ultralytics import YOLO from PIL import Image # 模型检测 license_plate_detector = YOLO('./model/best.pt') results = license_plate_detector('./42.jpg') # 读取原始图片 img = Image.open('./42.jpg') # 遍历每个检测到的车牌框 for idx, box in enumerate(results[0].boxes): # 提取框坐标(xyxy格式:左上角x1,y1,右下角x2,y2),转为整数 x1, y1, x2, y2 = map(int, box.xyxy[0]) # 裁剪车牌区域 plate_img = img.crop((x1, y1, x2, y2)) # 保存图片 plate_img.save(f'plate_{idx}.jpg')
方式B:使用OpenCV库
from ultralytics import YOLO import cv2 # 模型检测 license_plate_detector = YOLO('./model/best.pt') results = license_plate_detector('./42.jpg') # 读取原始图片(OpenCV默认BGR格式) img = cv2.imread('./42.jpg') # 遍历每个检测框 for idx, box in enumerate(results[0].boxes): x1, y1, x2, y2 = map(int, box.xyxy[0]) # 裁剪区域(OpenCV切片格式:y_start:y_end, x_start:x_end) plate_img = img[y1:y2, x1:x2] # 保存图片 cv2.imwrite(f'plate_{idx}.jpg', plate_img)
关键说明
results[0].boxes.xyxy返回的是检测框的浮点型坐标,需转为整数才能用于图片裁剪- 两种手动方式生成的图片可直接传入EasyOCR进行字符识别
内容的提问来源于stack exchange,提问作者Murtaza Nazar
相关产品推荐
相关产品推荐

