【RKNN系列】常用函数:使用RGA加速画框

以下是针对convert_and_draw_rectangle函数的详细使用说明:

convert_and_draw_rectangle 函数

功能

在给定的图像数据上使用RGA(Rockchip Graphics Acceleration)绘制矩形框。

语法

cpp 复制代码
IM_STATUS convert_and_draw_rectangle(uint8_t* dst_data, int width, int height, const cv::Rect& bbox) {
    // 创建 rga_buffer_t 结构
    rga_buffer_t dst;
    memset(&dst, 0, sizeof(rga_buffer_t));

    // 设置 rga_buffer_t 的属性
    dst.width = width;
    dst.height = height;
    dst.wstride = width;
    dst.hstride = height;
    dst.format = RK_FORMAT_BGR_888;  // 假设输入格式是 BGR

    // 使用 wrapbuffer_virtualaddr 设置虚拟地址
    dst = wrapbuffer_virtualaddr(dst_data, width, height, RK_FORMAT_BGR_888);

    // 将 cv::Rect 转换为 im_rect
    im_rect rga_rect = {
        .x = static_cast<int>(bbox.x),
        .y = static_cast<int>(bbox.y),
        .width = static_cast<int>(bbox.width),
        .height = static_cast<int>(bbox.height)
    };

    // 设置颜色 (绿色)
    uint32_t color = 0x00FF0000;  // ABGR 格式

    // 确保矩形尺寸至少为 2x2
    if (rga_rect.width < 2) rga_rect.width = 2;
    if (rga_rect.height < 2) rga_rect.height = 2;

    // 使用 RGA 绘制矩形
    IM_STATUS status = imrectangle(dst, rga_rect, color, 2);

    return status;

}

参数

  • dst_data: 目标图像数据的指针(uint8_t*)
  • width: 图像宽度(整数)
  • height: 图像高度(整数)
  • bbox: 要绘制的矩形框(cv::Rect 类型)

返回值

  • IM_STATUS: RGA操作的状态,表示操作是否成功

描述

这个函数使用RGA硬件加速在给定的图像数据上绘制一个矩形框。它主要用于在图像处理或计算机视觉应用中标记目标区域。

函数步骤:

  1. 创建并初始化 rga_buffer_t 结构体,用于描述目标图像缓冲区。
  2. 使用 wrapbuffer_virtualaddr 函数设置虚拟地址。
  3. 将OpenCV的 cv::Rect 转换为RGA使用的 im_rect 结构。
  4. 设置矩形框的颜色(本例中为绿色)。
  5. 确保矩形尺寸至少为2x2像素。
  6. 使用RGA的 imrectangle 函数绘制矩形。

注意事项

  • 函数假设输入图像格式为BGR(RK_FORMAT_BGR_888)。
  • 使用了RGA库,需要包含相应的头文件和链接库。
  • 矩形框的颜色是硬编码的绿色(ABGR格式:0x00FF0000)。
  • 函数会自动调整矩形尺寸,确保最小为2x2像素。
  • 矩形框的线宽固定为2像素。

示例用法

cpp 复制代码
int main() {
    // 假设我们有一个800x600的BGR图像
    int width = 800, height = 600;
    uint8_t* image_data = new uint8_t[width * height * 3];
    
    // 填充图像数据...

    // 定义要绘制的矩形
    cv::Rect bbox(100, 100, 200, 150);

    // 调用函数绘制矩形
    IM_STATUS status = convert_and_draw_rectangle(image_data, width, height, bbox);

    if (status == IM_STATUS_SUCCESS) {
        std::cout << "Rectangle drawn successfully" << std::endl;
    } else {
        std::cerr << "Failed to draw rectangle" << std::endl;
    }

    // 清理内存
    delete[] image_data;

    return 0;
}

依赖

  • RGA库(Rockchip Graphics Acceleration)
  • OpenCV库(用于cv::Rect类型)

这个说明提供了函数的基本信息、用途、参数说明、返回值、详细描述、使用注意事项和示例用法。您可以根据需要在Obsidian中进行适当的格式调整。

相关推荐
朔北之忘 Clancy20 小时前
青少年软编等考七级题解目录
开发语言·c++·青少年编程·gesp·csp·信奥赛·noi
汉克老师21 小时前
GESP2026年9月认证C++七级( 第一部分选择题(8~15题)精讲
c++·gesp·小学生·学c++编程
Mr_Macallon21 小时前
C++回顾(基础)(01)
c语言·开发语言·c++·学习
如意猴21 小时前
【C++】007 C/C++ 内存管理机制、malloc与new的区别及模板初阶
java·c++·算法
朝朝辞暮i21 小时前
C++ 第 32 课:main()、rclcpp::init()、spin()、shutdown()
开发语言·c++·算法
汉克老师1 天前
GESP2026年9月认证C++一级( 第三部分编程题(1、新龟兔赛跑))精讲
c++·gesp·小学生·学c++编程
沫璃染墨1 天前
《从零入门Linux系统篇(五十七):线程篇·十——生产者消费者模型进阶:从环形缓冲区到POSIX信号量》
linux·运维·服务器·开发语言·c++·系统架构·信号处理
wuminyu1 天前
LockStack在虚拟线程Mount和Unmount拷贝过程剖析
java·linux·c语言·jvm·c++
知识分享小能手1 天前
C++ 学习教程,从入门到精通,string类和标准模板库 — 完整知识点详解(16)
开发语言·c++·学习
无忧.芙桃1 天前
位图妙用:512MB 实现 40 亿整数的存在性查询
c语言·c++·面试·哈希算法