是否有任何理由将图像的通道顺序从 RGB 更改为 BGR?
Is there any reason for changing the channels order of an image from RGB to BGR?
我一直关注 this keras video classification tutorial where in the data preparation 部分,他们在 load_video
函数中加载视频的帧非常一般,但引起我注意的是这一行:
frame = frame[:, :, [2, 1, 0]]
这是我第一次遇到这种情况,大多数时候你只是将帧“按原样”附加到你的帧列表中,但在这里他们改变了频道的顺序(如果我不是错误)从 RGB 到 BGR,我在网络或他们的文档中找不到任何相关内容,有人可以给我一些关于这个决定的见解吗?
根据经验,顺序可以更改的原因取决于您用于加载图像的框架。由于 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 格式读取,则您需要在推理之前反转通道。
其实这是使用网络时的常见BUG!在使用之前要非常勤奋并了解图像数据是如何为网络预处理的。
我一直关注 this keras video classification tutorial where in the data preparation 部分,他们在 load_video
函数中加载视频的帧非常一般,但引起我注意的是这一行:
frame = frame[:, :, [2, 1, 0]]
这是我第一次遇到这种情况,大多数时候你只是将帧“按原样”附加到你的帧列表中,但在这里他们改变了频道的顺序(如果我不是错误)从 RGB 到 BGR,我在网络或他们的文档中找不到任何相关内容,有人可以给我一些关于这个决定的见解吗?
根据经验,顺序可以更改的原因取决于您用于加载图像的框架。由于 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 格式读取,则您需要在推理之前反转通道。
其实这是使用网络时的常见BUG!在使用之前要非常勤奋并了解图像数据是如何为网络预处理的。