Wang's blog

cv::Mat通道顺序转换(HWC转CHW)

Published on

简介

在深度学习的图像前处理中,一般会将HWC格式的图像转换为CHW格式,因此需要进行通道顺序转换操作。不同的框架提供了不同的操作:

  • 在python版OpenCV中,使用numpy.transpose(OpenCV本身不支持)
  • 在pytorch中,使用torch.permute
  • 在tensorflow中,使用tf.transpose

C++版OpenCV中进行HWC转CHW

C++版本OpenCV不提供通道转换操作,可以使用以下方法进行HWC转CHW(不支持任意转换操作):

// 原始图像,尺寸为(h, w, c)
cv::Mat image;
int h = image.rows;
int w = image.cols;
int c = image.channels();

// 尺寸转换为(h*w, c, 1),此步骤不对内存进行修改
image = image.reshape(1, h * w);

// 图像转置,尺寸变为(c, h*w, 1)
image = image.t();

// 尺寸转换为(c, h, w),此步骤不对内存进行修改
image = image.reshape(w, c);