簡體   English   中英

將視頻中檢測到的邊緣幀保存為視頻(opencv)

[英]Save the edge detected frames from a video as a video (opencv)

我想將檢測到的邊緣幀保存為視頻。 我可以預覽視頻的幀,但無法播放 output 視頻。

cap = cv2.VideoCapture("video.mp4")

fourcc = cv2.VideoWriter_fourcc(*'MP4V')

out = cv2.VideoWriter('output.mp4', fourcc, 23.976, (1280,720))

while(cap.isOpened()):
    ret, frame = cap.read()
    edges = cv.Canny(frame,50,50)
    out.write(edges)
    cv2.imshow('frame', edges)
    c = cv2.waitKey(1)
    if c & 0xFF == ord('q'):
        break

cap.release()
out.release()

我想談三個問題。

    1. 您正在將Canny應用於每個視頻幀。 output尺寸是多少:

      •  print(edges.shape) (720, 1280)
      • 維度720, 1280表示幀是灰度值。 如果幀是彩色圖像,則每個通道 R、G、B 的尺寸將為(720, 1080, 3)

      • 因此,您需要將VideoWriter object 初始化為grey-scale圖像。

      •  out = cv2.VideoWriter('output.mp4', fourcc, 23.976, (1280,720), isColor=False)
    1. 確保您正在捕獲下一幀:

      •  ret, frame = cap.read() if ret: edges = cv.Canny(frame,50,50). .
    1. 確保您的框架與VideoWriter object 的尺寸相同
    • while cap.isOpened(): ret, frame = cap.read() if ret: edges = cv2.Canny(frame, 50, 50) edges = cv2.resize(edges, (1280, 720)) out.write(edges). .

代碼:


import cv2

cap = cv2.VideoCapture("video.mp4")

fourcc = cv2.VideoWriter_fourcc(*"mp4v")

out = cv2.VideoWriter('output.mp4', fourcc, 23.976, (1280, 720), isColor=False)

while cap.isOpened():
    ret, frame = cap.read()
    if ret:
        edges = cv2.Canny(frame, 50, 50)
        edges = cv2.resize(edges, (1280, 720))
        out.write(edges)
        cv2.imshow('frame', edges)
        c = cv2.waitKey(1)
        if c & 0xFF == ord('q'):
            break
    else:
        break

cap.release()
out.release()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM