Opencv—读取视频/通过手机摄像头捕捉视频并保存成视频流

1.获取下载好的视频并播放视频

import cv2#引入cv2模块
#设置视频捕获
capture = cv2.VideoCapture('0.wmv')#0.wmv表示同一文件夹目录下的视频名
while True:
    ret, frame = capture.read()#变量ret判断视频帧是否成功读入;变量frame表示读取到数组类型的每一帧,实质是图片
    cv2.imshow('frame', frame)
    if cv2.waitKey(1)==ord('q'):#这里程序会等1毫秒,只要用户没有按下'q'键,程序就会执行下一个循环,若按下了'q'键,则程序会break跳出while循环。这里可以通过改变cv2.waitKey()里面的时间参数,来改变视频的播放速度
        break
capture.release()#关闭相机
cv2.destroyWindow()#关闭窗口

imshow('参数1‘,‘参数2’):参数1表示:显示图片的窗口名称;参数2表示:储存图片数据的对象

cv2.imshow('frame', frame):将每一帧图片显示在一个叫frame的窗口上。这里解释一下,为什么这样显示在窗口上会产生视频的效果。前面操作图片的时候,我们提到过,显示多幅图像的时候,若cv2.imshow()指定相同的窗口名,这样后面显示的图片会覆盖前面的图片,而产生一个窗口。这里视频显示也是同样的道理,每次while循环,窗口'frame'的名字不变,这样每一帧会覆盖上一帧,就产生了视频的效果。

2.通过手机摄像头捕捉视频并保存成视频流

(1)下载IP摄像头app

(2)程序如下:

import cv2
import time
if __name__ == '__main__':
 cv2.namedWindow("camera", 1)#创建窗口
 # 开启ip摄像头
 video = "http://admin:[email protected]:8081/"#通过IP摄像头获得手机IP
 cap = cv2.VideoCapture(video)  # 设置视频捕获
 #创建VideoWriter类对象
 fourcc = cv2.VideoWriter_fourcc(*'DIVX')#在windows下fourcc取值为DIVX
 fps =cap.get(cv2.CAP_PROP_FPS)#获取帧率
 size = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)), 
         int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))#获取帧大小
 out = cv2.VideoWriter('F:\\camera.avi',fourcc, fps, size)#第一项是视频保存路径
 while(cap.isOpened()):#判断相机是否打开
    ret, frame = cap.read()#变量ret判断视频帧是否成功读入;变量frame表示读取到数组类型的每一帧,实质是图片
    if cv2.waitKey(1) & 0xFF == ord('q'):#按q键退出
        break
    if  ret == True:
        out.write(frame)#保存帧
        cv2.imshow('frame', frame)#显示帧
 cap.release()#关闭相机
 out.release()
 cv2.destroyWindow("camera")#关闭窗口

其中创建VideoWriter类对象过程参考链接:https://blog.csdn.net/qq_18995069/article/details/82772944

猜你喜欢

转载自blog.csdn.net/qq_43130414/article/details/85772125