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);