前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OpenCV4.8 C++ 实现YOLOv8 OBB旋转对象检测 推理演示

OpenCV4.8 C++ 实现YOLOv8 OBB旋转对象检测 推理演示

作者头像
OpenCV学堂
发布2024-02-23 19:36:43
2K1
发布2024-02-23 19:36:43
举报
文章被收录于专栏:贾志刚-OpenCV学堂

YOLOv8 OBB介绍

YOLOv8框架在在支持分类、对象检测、实例分割、姿态评估的基础上更近一步,现已经支持旋转对象检测(OBB),基于DOTA数据集,支持航拍图像的15个类别对象检测,包括车辆、船只、典型各种场地等。包含2800多张图像、18W个实例对象。

不同尺度的YOLOv8 OBB模型的精度与输入格式列表如下:

导出与预测

基于YOLOv8命令行推理测试:

代码语言:javascript
复制
## 导出
yolo export model=yolov8s-obb.pt format=onnx
## 推理
yolo obb predict model=yolov8n-obb.pt source=plane_03.jpg

输入与输出结构说明

基于OpenCV4.8 DNN与ONNX格式模型直接预测推理,首先看一下ONNX格式的YOLOv8-OBB输入与输出格式:

OpenCV4.8 C++ 推理演示

我把YOLOv8 OBB C++推理封装成一个类YOLOv8ObbDetector,客户端调用只有引用头文件,然后三行代码即可实现YOLOv8旋转对象检测C++ 的推理,代码演示如下:

代码语言:javascript
复制
#include <yolov8_obb_opencv.h>
#include <iostream>
#include <fstream>

std::string label_map = "D:/python/my_yolov8_train_demo/dotav1.txt";
int main(int argc, char** argv) {
    std::vector<std::string> classNames;
    std::ifstream fp(label_map);
    std::string name;
    while (!fp.eof()) {
        getline(fp, name);
        if (name.length()) {
            classNames.push_back(name);
        }
    }
    fp.close();
    std::shared_ptr<YOLOv8ObbDetector> detector(new YOLOv8ObbDetector());
    detector->initConfig("D:/python/my_yolov8_train_demo/yolov8s-obb.onnx", 0.4f, 1024, 1024);
    cv::Mat frame = cv::imread("D:/python/my_yolov8_train_demo/wh300.jpg");
    detector->detect(frame, classNames);
    cv::imshow("YOLOv8 旋转对象检测 + OpenCV4.8", frame);
    cv::waitKey(0);
    cv::destroyAllWindows();
    return 0;
}

运行结果如下:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-02-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 OpenCV学堂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档