Ceci est mon code pour enregistrer le streaming web_cam. Cela fonctionne mais le problème avec le fichier vidéo de sortie.
import numpy as np
import cv2
cap = cv2.VideoCapture(0)
# Define the codec and create VideoWriter object
#fourcc = cv2.cv.CV_FOURCC(*'DIVX')
#out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640,480))
out = cv2.VideoWriter('output.avi', -1, 20.0, (640,480))
while(cap.isOpened()):
ret, frame = cap.read()
if ret==True:
frame = cv2.flip(frame,0)
# write the flipped frame
out.write(frame)
cv2.imshow('frame',frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
else:
break
# Release everything if job is finished
cap.release()
out.release()
cv2.destroyAllWindows()
Le fichier de sortie est corrompu en raison d'une fréquence d'images et d'une résolution d'image incorrectes. En utilisant ce code:
out = cv2.VideoWriter('output.avi', -1, 20.0, (640,480))
Nous avons défini le fps/frame rate par seconde 20. Ce qui n'était pas correct. De plus, la largeur et la hauteur du cadre étaient incorrectes. J'ai résolu en obtenant fps, largeur, hauteur à partir du profil web_cam capturé.
cap = cv2.VideoCapture(0) #web-cam capture
fps = cap.get(cv2.CAP_PROP_FPS)
width = cap.get(cv2.CAP_PROP_FRAME_WIDTH) # float
height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT) # float
out = cv2.VideoWriter('output.avi', -1,fps, (int(width), int(height)))
J'ai ajouté codec
parameter
à la fonction cv2.videowriter
.
import numpy as np
import cv2
cap = cv2.VideoCapture(0)
# Define the codec and create VideoWriter object
#fourcc = cv2.cv.CV_FOURCC(*'DIVX')
#out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640,480))
fps = cap.get(cv2.CAP_PROP_FPS)
width = cap.get(cv2.CAP_PROP_FRAME_WIDTH) # float
height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
codec = cv2.VideoWriter_fourcc('M', 'J', 'P', 'G')
out = cv2.VideoWriter('output.avi',codec,fps, (int(width),\
int (height)))
#out = cv2.VideoWriter('output.avi', -1, 20.0, (640,480))
while(cap.isOpened()):
ret, frame = cap.read()
if ret==True:
frame = cv2.flip(frame,0)
# write the flipped frame
out.write(frame)
cv2.imshow('frame',frame)
if cv2.waitKey(1) & 0xFF == ord('q') :
break
else:
break
# Release everything if job is finished
cap.release()
out.release()
cv2.destroyAllWindows()
J'espère que vous verrez ce qui est différent dans mon code et votre code. Le mien fonctionne maintenant. Utilisation du codec MJPG
pour .avi
extention l'indention est un peu foirée, veuillez pardonner car je suis un utilisateur pour la première fois. Le fichier video
n'est plus corrompu. J'ai obtenu les informations de: Lien