ImS*_*o3K 4 python opencv image-processing computer-vision keras
我一直在关注这个 keras视频分类教程,在数据准备部分,他们在函数中非常通用地加载视频帧load_video,但引起我注意的是这一行:
frame = frame[:, :, [2, 1, 0]]
Run Code Online (Sandbox Code Playgroud)
这是我第一次遇到这种情况,大多数时候您只是将帧“按原样”附加到帧列表中,但在这里它们将通道的顺序(如果我没记错的话)从 RGB 更改为BGR,我在网络或他们的文档中找不到任何与之相关的内容,有人可以给我一些关于这个决定的见解吗?
根据经验,顺序可以更改的原因取决于您用于加载图像的框架。OpenCV 特别以 BGR 格式对通道进行排序,因为主要是历史原因,但现在已经过时了。正因为如此,我们不幸地坚持了这种设计选择。常规 RGB 格式的图像可以使用 scikit-image、matplotlib 和 Pillow 来查看。
事实上,如果你看一下这个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)
Run Code Online (Sandbox Code Playgroud)
当然,您不需要反转通道,因为神经网络将根据提供的输入数据进行学习,但人们倾向于这样做,以便轻松调试图像,而不必担心不断反转通道展示。具体来说,如果神经网络按照 BGR 排序进行训练,如果您加载 RGB 格式的图像,则需要反转通道,因为这就是图像通道在训练中的表示方式。总而言之,这取决于框架,但在训练后使用神经网络时需要记住这一点。如果数据以 BGR 格式进行训练,如果您的图像以 RGB 格式读取,则需要在推理之前反转通道。
事实上,这是使用网络时常见的错误!在使用图像数据之前要非常勤奋并了解如何为网络对其进行预处理。
| 归档时间: |
|
| 查看次数: |
1909 次 |
| 最近记录: |