[英]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()
我想談三個問題。
您正在將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)
確保您正在捕獲下一幀:
ret, frame = cap.read() if ret: edges = cv.Canny(frame,50,50). .
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.