【问题标题】:Is there any reason for changing the channels order of an image from RGB to BGR?是否有任何理由将图像的通道顺序从 RGB 更改为 BGR?
【发布时间】:2022-01-04 00:05:28
【问题描述】:

我一直在关注this keras 视频分类教程,其中在data preparation 部分中,他们在load_video 函数中加载视频的帧非常通用,但引起我注意的是这行:

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

这是我第一次遇到这种情况,大多数情况下您只会将帧“按原样”附加到您的帧列表中,但在这里它们会更改频道的顺序(如果我没记错的话)从 RGB 到 BGR,我在网络或他们的文档中找不到与它相关的任何内容,有人能给我一些关于这个决定的见解吗?

【问题讨论】:

  • 如果你所做的一切都是连贯地使用渠道,那就没有问题了。即使在深度学习训练时使用交换的颜色平面也是无害的,因为系统永远不会知道颜色是不真实的。但是你需要保留交换!

标签: python opencv image-processing keras computer-vision


【解决方案1】:

根据经验,顺序可以更改的原因取决于您用于加载图像的框架。由于mostly historical reasons that are now outdated,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 格式读取图像,则需要在推理之前反转通道。

事实上,这是使用网络时的常见错误!非常勤奋,并在使用之前了解图像数据是如何为网络进行预处理的。

【讨论】:

  • 想知道哪些优化需要 BGR 而不是 RGB?为什么 BGR 比 RGB 更好?
  • @fmw42 好问题!这主要是出于历史原因。这是与相机制造商最兼容的格式,因此一旦加载数据,您无需进行任何额外的操作即可将其转换为我们最终熟悉的格式:learnopencv.com/why-does-opencv-use-bgr-color-format
  • 顺便说一句,你让我头疼了,我打算使用一个预训练模型,该模型是在 coco 数据集上训练的,它需要 BGR 格式。
  • “与相机制造商兼容”的原因是一个误解。如果他们真的因为这个原因使用了 BGR,那真是太可悲了。 BRG 在 little-endian 机器中有意义,其中 RGB 三元组写为 R
  • 在链接的博客文章中,“Windows,当使用 COLORREF 指定颜色值时,它们使用 BGR 格式 0x00bbggrr。” — Windows 一直在小中位数机器上使用,所以 0x00bbggrr 以“rrggbb00”或 RGB 的形式存储在内存中!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-11
  • 2018-02-08
  • 1970-01-01
相关资源
最近更新 更多