You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用OpenVINO API 2.0从cv::Mat与cv::Rect创建单ROI张量

OpenVINO API 2.0 基于cv::Mat和cv::Rect实现无内存复制的ROI推理

核心实现思路

API 2.0中可通过ov::Tensor的重载构造函数直接基于原始张量创建ROI视图,完全避免内存复制。关键是将cv::Rect的坐标映射到ov::Coordinate的begin和end数组,映射逻辑需严格匹配模型输入的张量布局(比如你之前API 1.0中使用的NHWC)。

完整代码实现

// 假设已获取cv::Mat格式图像image,以及目标ROI的cv::Rect bounding_box
// 假设模型输入布局为NHWC,数据类型为U8,输入shape为{1, H, W, 3}
int channels = image.channels();
int image_height = image.rows;
int image_width = image.cols;

// 1. 将cv::Mat转换为ov::Tensor(共享内存,无复制)
ov::Tensor full_tensor(ov::element::u8, 
                       ov::Shape({1, image_height, image_width, channels}), 
                       image.data);

// 2. 将cv::Rect转换为ov::Coordinate的begin和end
// NHWC布局下,维度顺序是[N, H, W, C]
ov::Coordinate begin = {
    0,                          // N维度起始(单batch固定为0)
    bounding_box.y,             // H维度起始(对应cv::Rect的y)
    bounding_box.x,             // W维度起始(对应cv::Rect的x)
    0                           // C维度起始(全通道固定为0)
};

ov::Coordinate end = {
    1,                          // N维度结束(单batch固定为1)
    bounding_box.y + bounding_box.height,  // H维度结束
    bounding_box.x + bounding_box.width,   // W维度结束
    channels                    // C维度结束(全通道为通道数)
};

// 3. 创建ROI Tensor(共享原始内存,无复制)
ov::Tensor roi_tensor(full_tensor, begin, end);

// 4. 设置到推理请求
request.set_input_tensor(input_name, roi_tensor);

关键细节说明

  • 布局匹配:若模型输入为NCHW布局,begin和end的维度顺序需调整为{N, C, H, W},对应begin为{0, 0, bounding_box.y, bounding_box.x},end为{1, channels, bounding_box.y+bounding_box.height, bounding_box.x+bounding_box.width}。
  • 内存连续性:需确保cv::Mat是连续内存(可通过image.isContinuous()检查),若不连续,可先调用image = image.clone()转为连续内存。
  • 数据类型一致性:ov::element::u8需与模型输入数据类型完全匹配,若模型输入为FP32,需先做类型转换(ROI构造仅支持同类型张量视图)。

与API 1.0的对应关系

你之前API 1.0中make_roi_desc+make_shared_blob的逻辑,在API 2.0中简化为直接基于原始Tensor创建ROI视图,无需手动构建TensorDesc,底层同样共享原始内存,实现零拷贝推理。

内容的提问来源于stack exchange,提问作者Jared

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 00:42:22