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

如何在OpenCV C++中为cv::Mat设置自定义步长采样数组元素?

解决OpenCV cv::Mat跳步采样数组的问题

要实现从float数组中每隔3个元素采样并创建cv::Mat,核心是正确使用构造函数的step参数,注意以下两点:

  1. step参数的单位是字节:你需要将元素间隔转换为字节数,而非元素个数。每个float占4字节,每隔3个元素采样意味着相邻元素的字节偏移是 3 * sizeof(float)(即12字节)。
  2. Mat的列数要匹配预期采样的元素数量:你的示例中预期输出4个元素,因此Mat的列数应设为4,而非3。

正确代码示例

#include <opencv2/opencv.hpp>
#include <iostream>

int main() {
    float arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    // 构造1行4列的Mat,step设置为3个float的字节数
    cv::Mat mat(1, 4, CV_32F, arr, 3 * sizeof(float));
    std::cout << mat << "\n"; // 输出:[1, 4, 7, 10]
    return 0;
}

关键说明

  • 浅拷贝注意事项:通过这种方式创建的Mat是对原数组的浅引用,原数组的生命周期必须长于Mat对象,否则会导致内存访问错误。如果需要独立的Mat副本,可以调用 mat.clone() 生成深拷贝。
  • step的本质:对于1维Mat,step 指定了相邻元素之间的字节跨度;对于多维Mat,step[i] 表示第i维的总字节数。这里仅需设置1维的step即可实现跳步采样。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 10:09:56