【opencv】——cv mat转tensor(b,c,h,w)

本文介绍了如何使用C++将OpenCV中的图像矩阵转换为符合PyTorch需求的Tensor,涉及三层嵌套循环和索引计算方式的调整。重点在于理解cv与tensor在内存布局上的区别,并提供了C++代码示例。
摘要由CSDN通过智能技术生成

相关文章:
Mat data的排列样式 || 深度学习矩阵排列注意事项

1. cv mat的排列形式

这个可以参考上面的文章。

2. mat->tensor

mat的矩阵样式为:h,w,c。tensor的矩阵样式为:c,h,w。在pytorch中可以用ToTensor()函数实现。这里给出c++的参考代码:

void cvImageToTensor(const cv::Mat & image, float *tensor, nvinfer1::Dims dimensions)
{
  const size_t channels = dimensions.d[1];
  const size_t height = dimensions.d[2];
  const size_t width = dimensions.d[3];
  // TODO: validate dimensions match
  const size_t stridesCv[3] = { width * channels, channels, 1 };
  const size_t strides[3] = { height * width, width, 1 };

  for (int i = 0; i < height; i++) 
  {
    for (int j = 0; j < width; j++) 
    {
      for (int k = 0; k < channels; k++) 
      {
        const size_t offsetCv = i * stridesCv[0] + j * stridesCv[1] + k * stridesCv[2];
        const size_t offset = k * strides[0] + i * strides[1] + j * strides[2];
        tensor[offset] = (float) image.data[offsetCv];
      }
    }
  }
}

其实就是3层嵌套的loop,只是注意mat和tensor 索引计算的方式不同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值