三行代码  ›  专栏  ›  技术社区  ›  ImSo3K

是否有任何理由将图像的通道顺序从RGB更改为BGR?

  •  1
  • ImSo3K  · 技术社区  · 5 天前

    this keras 视频分类教程在哪里 data preparation load_video 功能相当一般,但吸引我注意的是这一行:

    frame = frame[:, :, [2, 1, 0]]
    

    1 回复  |  直到 5 天前
        1
  •  3
  •   rayryeng    5 天前

    根据经验,顺序可以更改的原因取决于用于加载图像的框架。OpenCV特别以BGR格式订购通道,因为一些内部优化以这种方式利用了格式。使用scikit image、matplotlib和Pillow可以看到常规RGB格式的图像。

    load_video 函数,它使用OpenCV打开视频,因此帧采用BGR格式。因此,必须交换通道才能将其转换为RGB格式:

    def load_video(path, max_frames=0):
        cap = cv2.VideoCapture(path)
        frames = []
        try:
            while True:
                ret, frame = cap.read()
                if not ret:
                    break
                frame = crop_center(frame)
                frame = frame[:, :, [2, 1, 0]]
                frames.append(frame)
    
                if len(frames) == max_frames:
                    break
        finally:
            cap.release()
        return np.array(frames)
    

    当然,您不需要反转通道,因为神经网络将根据提供的输入数据进行学习,但人们倾向于这样做,以便调试图像,而不必担心连续反转通道进行显示。具体来说,如果神经网络是按BGR顺序训练的,如果以RGB格式加载图像,则需要进行通道反转,因为这是图像通道在训练中的表示方式。总之,这取决于框架,但在训练神经网络后使用神经网络时,需要记住这一点。如果数据是以BGR格式训练的,如果图像是以RGB格式读取的,则需要在推断之前反转通道。