码力全开 / 使用YOLO-obb检测旋转物体

Created Thu, 03 Jul 2025 21:19:34 +0800 Modified Thu, 03 Jul 2025 21:42:08 +0800
277 Words 1 min

这里我们介绍如何通过YOLOv8-obb模型来检测旋转的物体,常用于停车场车辆、卫星图像、航拍船舶、工业零件等场景。

首先安装YOLO,这里选择的版本是8.1.3。接着下载对应的模型:

wget https://github.com/ultralytics/assets/releases/download/v8.1.0/yolov8m-obb.pt

之后是对应的代码:

import cv2
import math
import numpy as np
from ultralytics import YOLO

img_path = "https://ultralytics.com/images/boats.jpg"
img = cv2.imread(img_path)
model = YOLO("/path/to/yolov8m-obb.pt")
results = model(img_path)

for result in results:
    xywhr = result.obb.xywhr
    cls_int = result.obb.cls.int()
    for elem,i in zip(xywhr,cls_int):
        if i == 1:
            x,y,w,h,r=elem
            angle_degrees = math.degrees(r)
            rect = ((x,y),(w,h),angle_degrees)
            box = cv2.boxPoints(rect)
            box = np.int0(box)
            cv2.drawContours(img, [box], 0, (0,0,255), 2)

cv2.imshow("Image",img)
cv2.waitKey(0)

我们将弧度转换为角度,之后使用boxPoints计算旋转后的点的坐标,通过drawContours绘制其边框而不是使用rectangle函数。

其结果如下:

rotate

可以看到大体上可以较好的将船标记出来,有些地方还有待加强。

参考文章:

https://docs.ultralytics.com/zh/models/yolov8/#performance-metrics

https://docs.ultralytics.com/zh/tasks/obb/#val

如果喜欢这篇文章或对您有帮助,可以:[☕] 请我喝杯咖啡 | [💓] 小额赞助