一、开启摄像头进行实时显示
import cv2
#设置显示内容的框大小
cv2.namedWindow('video',cv2.WINDOW_NORMAL)
cv2.resizeWindow('video',640,480)
cap = cv2.VideoCapture(0)
while True:
ret,frame = cap.read()
if not ret:
#判断是否读到数据,没有的话直接退出
break
cv2.imshow('video',frame)
key = cv2.waitKey(10)
if key == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
在输入上述代码后即可在电脑(树莓派)上显示出相应大小的框,按q即可退出
二、播放已有的 视频
如果你想将已有的视频进行播放,需要进行几步操作:
1.命名视频
将视频通过电脑vnc传输到树莓派上,并进行好命名,我在此举例的命名为 test.mp4 ,同时需要记住你对视频的命名
2.路径放置
将你想播放的视频命名好之后放置在这里
3.修改代码
将代码进行修改,显示的内容不是摄像头而是已有的视频,同时由于存放在相同路径下,所以 ./文件名 即可,其余代码部分相同,点击运行开始播放,按 q 退出播放,同时可以设置播放速率 cv2.waitkey(num)的num设置的越大,播放的速率越慢,即视频会显得略微卡顿。值得注意的是,这里的参数只能是整数。
值得注意的是,这里的本质仅仅是将视频的图片以一帧一帧的形式进行播放,播放的快了则形成我们肉眼所见的视频,也就是说,这个视频将会是静音的,没有任何的声音。
cap = cv2.VideoCapture(0)
#将 开启摄像头进行实时显示的这行代码 替换为下行代码
cap = cv2.VideoCapture('./test.mp4')
三、视频录制
在这个程序之中,树莓派会将摄像头捕获的数据逐帧写入,并按我们的要求进行命名,同时文件将会储存在代码的同一路径下。视频的录制时长由我们自己决定,但不由代码控制,而是由我们按键q控制。按下q时退出录制同时结束程序。如果需要查看该视频的话,可以将保存的文件名 output1.mp4 替换入前面播放已有视频的程序中相应位置即可。
需要注意的是,这里是以20帧的帧率进行保存,如果需要播放的速度与录制的速度相同的话,cv2.keywait(1000/帧率),即一秒播放20张图片,其他帧率同理。
import cv2
cap = cv2.VideoCapture(0)
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
# mpv4 是解包操作
vw = cv2.VideoWriter('output1.mp4',fourcc,20,(640,480))
# output1.mp4是自定义的保存文件名 fourcc 是指定你所保存的格式
# 20是帧率 640 480是摄像头的分辨率 与摄像头需匹配否则无法保存
while cap.isOpened():
ret,frame = cap.read()
if not ret:
print('can not recive frame,Exting...')
break
vw.write(frame)
#逐帧写入视频
cv2.imshow('frame',frame)
if cv2.waitKey(1) == ord('q'):
break
cap.release()
vw.release()
cv2.destroyAllWindows()