Tentativas recentes de executar efeito YOLOv3, quero ler o vídeo, quadro a quadro de processamento, visualização e salvar o vídeo, clique aqui em conjunto com o método do código de gravação simples -
def test_video(model, video_path, video_out_path):
cap = cv2.VideoCapture(video_path)
fourcc = cv2.VideoWriter_fourcc(*'MJPG')
out = cv2.VideoWriter(video_out_path, fourcc, fps=20.0, frameSize=(1920, 1080))
pre_time = 0
while(True):
# time
curr_time = time.time()
print(curr_time-pre_time)
pre_time = curr_time
# process
ret, frame = cap.read()
frame_pil = Image.fromarray(frame) # opencv to PIL.Image
frame_pil = test_image(model, image=frame_pil, conf_thres=0.5)
frame = np.asarray(frame_pil) # PIL.Image to opencv
cv2.namedWindow('frame', cv2.WINDOW_NORMAL)
cv2.imshow('frame', frame)
# save
out.write(frame)
if cv2.waitKey(1) == 113:
break
cap.release()
out.release()
- Vídeo lido : PAC = cv2.VideoCapture (video_path) , a leitura de vídeo de acordo video_path caminho, tal como na presente forma de realização a entrada video_path = "/xxxxx/video_name.mp4"; e, em seguida, num ciclo, pode ser utilizado " RET, Moldura cap.read = () "quadro a quadro para obter" retorno, frame "o. (Return to Verdadeiro / Falso, seja lido em nome do normal)
- Exibição de vídeo : cv2.imshow ( 'Frame', Frame) , o quadro de mostrar resultado do processamento quadro a quadro
- Vídeo guardado : o fourcc = cv2.VideoWriter_fourcc (* 'MJPG') especifica o vídeo codec de código de 4 bytes; OUT = cv2.VideoWriter (video_out_path, o fourcc, FPS = 20,0, a = frameSize (1920, 1080)) é definido para salvar o caminho , fourcc, fps, frameSize.
Nota , frameSize deve corresponder ao quadro (largura, altura), fourcc também precisa definir a correta (antes, sem sucesso de DIVX), ou que possam causar danos ao vídeo não pode ser lido.