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 索引计算的方式不同。