我一直在關注這個 keras視頻分類教程,其中在資料準備部分,他們在load_video函式中加載視頻的幀非常一般,但引起我注意的是這一行:
frame = frame[:, :, [2, 1, 0]]
這是我第一次遇到這種情況,大多數情況下您只會將幀“按原樣”附加到您的幀串列中,但在這里它們將通道的順序(如果我沒記錯的話)從 RGB 更改為BGR,我在網路或他們的檔案中找不到任何與之相關的內容,有人能給我一些關于這個決定的見解嗎?
uj5u.com熱心網友回復:
根據經驗,順序可以更改的原因取決于您用于加載影像的框架。由于現在已經過時的歷史原因, 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 格式讀取,則需要在推理之前反轉通道。
事實上,這是使用網路時的常見錯誤!非常勤奮,并在使用之前了解影像資料是如何為網路進行預處理的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/367407.html
標籤:Python opencv 图像处理 凯拉斯 计算机视觉
