Warum das von cv2.VideoWriter generierte Video nicht abgespielt werden kann (wird laufend ergänzt)

Verwendung von cv2.VideoWriter

cv2.VideoWriter(filename, fourcc, fps, frameSize[, isColor])
  • Dateiname: Speicherpfad des Videos
  • fourcc: Geben Sie den Encoder an
  • fps: Videobildrate
  • frameSize: Bildgröße
  • isColor: Schwarz-Weiß-Bild oder Farbbild

Beispiel

first_frame = cv2.imdecode(np.fromfile(img_names[0],dtype=np.uint8),-1)
vid_writer = cv2.VideoWriter(filename=rf'{label_dir}\{index}.mp4', fourcc=cv2.VideoWriter_fourcc(*'XVID'), fps=fps, frameSize=(first_frame.shape[1],first_frame.shape[0]))
for i in os.listdir(img_names):
    img = cv2.imdecode(np.fromfile(img_names[i],dtype=np.uint8),-1)
    img2 = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR) # 如果是灰度图需要加这行
    vid_writer.write(img2)

img_names ist eine Liste von Bildpfaden, die zum Generieren des Videos verwendet werden.

fehleranfälliger Ort

  1. Wenn der Bildpfad in Chinesisch vorhanden ist , verwenden Sie ihn, cv2.imdecode(np.fromfile(img_names[0],dtype=np.uint8),-1)um das Bild einzulesen, anstatt zu verwendencv2.imread
  2. Wenn Sie den frameSize-Parameter manuell angeben, stellen Sie sicher, dass die angegebene Größe der Größe des gelesenen Bildes entspricht
  3. Wenn Sie den frameSize-Parameter entsprechend der Eingabebildgröße wie im Beispiel angeben, müssen Sie darauf achten, dass frameSize nicht als first_frame.shape[:2] angegeben werden kann, da die Ausgabe von first_frame.shape [Höhe, Breite, Zahl ist der Kanäle] und frameSize=[Breite, Höhe], also muss die Reihenfolge umgekehrt werden
  4. Wenn das Bild ein Graustufenbild ist , müssen Sie img2 = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)es zuerst in das BGR-Format konvertieren ( dieser Blog ).

Guess you like

Origin blog.csdn.net/zylooooooooong/article/details/123327234