使用micropython的ulab.numpy切片将RGB888的NHWC格式转换为RGBP888的NCHW格式时候非常慢

Viewed 71

重现步骤
转换代码如下.每次转换需要花费200ms以上.

rgb888_img_np = rgb888_img.to_numpy_ref()
rgb888p_img_np = np.zeros((3, rgb888_img_np.shape[0], rgb888_img_np.shape[1]), dtype=np.uint8)
with ScopedTiming("convert",debug_mode > 0):
    rgb888p_img_np[0] = rgb888_img_np[:, :, 0]  # R通道
    rgb888p_img_np[1] = rgb888_img_np[:, :, 1]  # G通道
    rgb888p_img_np[2] = rgb888_img_np[:, :, 2]  # B通道
rgb888p_img = image.Image(rgb888p_img_np.shape[2], rgb888p_img_np.shape[1], image.RGBP888, data=rgb888p_img_np)

我找到一个快一些的方法

img_hwc=rgb888_img.to_numpy_ref()
shape=img_hwc.shape
img_tmp = img_hwc.reshape((shape[0] * shape[1], shape[2]))
img_tmp_trans = img_tmp.transpose()
img_res=img_tmp_trans.copy()
img_return=img_res.reshape((shape[2],shape[0],shape[1]))

这个转换只要120ms,但是还是觉得很慢.

期待结果和实际结果
希望能够快速完成转换

软硬件版本信息
K230
CanMV v1.2.2

错误日志

尝试解决过程

补充材料

1 Answers

该问题是因为ulab无法像numpy一样灵活的进行transpose,我们后续优化会考虑是否封装接口。