变量定义
var t_rgb; 原始RGB的tensor
var t_bgr; 目标BGR的tensor
小结
默认从frame数组构造的tensor的hwc格式的,所以我们先要将hwc格式转成chw格式,然后再去交换R和B通道的数据,这是从图像层面比较容易想到的过程,但是也比较复杂,方法1就描述了这个过程。
然后我们可以注意到,实际上并不需要显示的CHW格式,我们要做的事情就是交换R和B的值,所以方法2直接在第三个维度去做split,然后重新组合成新的tensor即可。
进一步,我们考虑一下宏观的信息,注意到RGB和BGR,都是三通道,而且只是顺序上相反,所以最简单的方法就是做一个reverse,直接将通道顺序反过来,从RGB直接到BGR。
方法1
- hwc转chw
- unstack,分成r g b 三个通道
- stack,将b g r 组成一个新的tensor
- 新的chw的bgr转成hwc的bgr格式
var tensor_chw = t_rgb.transpose([2,0,1]);
var tensor_unstack = tf.unstack(tensor_chw, 0);
var tensor_stack = tf.stack([tensor_unstack[2], tensor_unstack[1], tensor_unstack[0]], 0);
t_bgr = tensor_stack.transpose([2,0,1]);
方法2
- split,沿着第三个维度进行切分,三等分,即分成了R G B三个通道
- concat,将B G R 三个通道组成新的tensor
var t_split = tf.split(t_rgb, 3, 2);
t_bgr = tf.concat([t_split[2], t_split[1], t_split[0]], 2);
方法3
- reverse,在hwc格式的RGB的第三个维度做reverse,直接转成hwc格式的BGR tensor
var t_bgr = tf.reverse(t_rgb, -1);