YOLOv8自定义车牌检测模型Python脚本坐标异常排查求助
问题根源与解决方案
核心问题是你对YOLOv8输出的xyxy坐标格式理解错误,导致图像裁剪逻辑出错:
- YOLOv8的
xyxy格式输出为 [x1, y1, x2, y2],分别对应检测框的左上角x坐标、左上角y坐标、右下角x坐标、右下角y坐标 - 你的脚本错误地将
x2当作宽度w、y2当作高度h,用image[y:y+h, x:x+w]裁剪,这相当于从左上角(y1)开始,截取y2长度的区域,远超实际检测框范围
修正后的Python脚本
import cv2 from ultralytics import YOLO model = YOLO('best.pt') image = cv2.imread('photo1.jpg') result = model(image) # 获取检测框的xyxy坐标 boxes = result[0].boxes.xyxy.tolist() if boxes: x1, y1, x2, y2 = boxes[0] # 转换为整数坐标 x1, y1, x2, y2 = int(x1), int(y1), int(x2), int(y2) # 正确裁剪:从y1到y2,x1到x2 cropped_plate = image[y1:y2, x1:x2] cv2.imshow('Cropped License Plate', cropped_plate) cv2.waitKey(0) cv2.destroyAllWindows() else: print("未检测到车牌")
更简便的方法:使用YOLOv8自带的裁剪功能
YOLOv8提供了内置的裁剪保存方法,无需手动处理坐标:
from ultralytics import YOLO model = YOLO('best.pt') # 直接检测并保存裁剪后的目标 results = model('photo1.jpg', save_crop=True)
裁剪后的图像会保存在runs/detect/predict/crops/目录下对应类别的文件夹中。
内容的提问来源于stack exchange,提问作者Dhruvkumar Patel
相关产品推荐
相关产品推荐

