问题描述
`import cv2
import numpy as np
cam = cv2.VideoCapture(0)
fourcc = cv2.VideoWriter_fourcc(*'XVID')`
即使我使用以下格式,视频文件也无法打开:'WMV1、'WMV2'、'MJPG'、'DIVX'、'XVID'和'H264'
`rec = cv2.VideoWriter("output.avi",fourcc,17,(640,480))
flag = False
font = cv2.FONT_HERShey_SIMPLEX
while 1:
b,img = cam.read()
if b:
cv2.putText(img,"c-Capture s-Save q- Quit",(100,50),cv2.FONT_HERShey_PLAIN,fontScale=2,color=(100,100,100),thickness=3)
key = cv2.waitKey(1) & 0XFF
if key == ord('c'):
flag = True`
按 c 时程序开始捕获视频
`if flag:
cv2.putText(img,"Recording",(50,100))
rec.write(img)
if key == ord('s'):
flag = False`
用 s 保存视频
` if not flag:
rec.release()
if key == ord('q'):
rec.release()
break
cv2.imshow("ViewPort",img)
cv2.destroyAllWindows()`
即使我笔记本电脑上的所有视频播放器都没有打开文件有什么帮助吗?
解决方法
为了主要问题是你在开始时给 False 标记。在这种情况下,rec.release() 在开始时调用,这将关闭空的视频文件。要解决它,您可以将 flag = False 替换为 flag = None,然后必须使用以下内容修复 'if not flag:':'elif flag == False:'。 接下来,我确定您不需要保存视频中的文本。为此,您需要从视频帧中复制一份。一个用于显示,一个用于保存。
代码如下:
import cv2
import numpy as np
cap = cv2.VideoCapture(0)
width = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
fps = cap.get(cv2.CAP_PROP_FPS)
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi',fourcc,fps,(int(width),int(height)))
flag = None
while(cap.isOpened()):
ret,frame = cap.read()
frame_out = frame.copy()
key = cv2.waitKey(1)
if key == ord('c'):
flag = True
elif key == ord('s'):
flag = False
if ret == True:
cv2.putText(frame,'c-Capture s-Save q- Quit',(100,50),cv2.FONT_HERSHEY_PLAIN,2,100,100),3)
if flag == True:
cv2.putText(frame,'Recording',(50,100))
out.write(frame_out)
elif flag == False:
out.release()
flag = None
cv2.imshow('frame',frame)
if key == ord('q'):
break
else:
break
cap.release()
out.release()
cv2.destroyAllWindows()