cv2.VideoCapture读取视频或摄像头,并进行保存帧图像或视频

一、语法:cap = cv2.VideoCapture(0)

说明:参数0表示默认为笔记本的内置第一个摄像头,如果需要读取已有的视频则参数改为视频所在路径路径,例如:cap=cv2.VideoCapture('video.mp4')

二、语法:cap.isOpened()

说明:判断视频对象是否成功读取,成功读取视频对象返回True。

三、语法:ret,frame = cap.read()

说明:按帧读取视频,返回值ret是布尔型,正确读取则返回True,读取失败或读取视频结尾则会返回False。frame为每一帧的图像,这里图像是三维矩阵,即frame.shape = (640,480,3),读取的图像为BGR格式。

四、语法:key = cv2.waitKey(1)

说明:等待键盘输入,参数1表示延时1ms切换到下一帧,参数为0表示显示当前帧,相当于暂停。

五、读取摄像头并保存为视频代码演示:

import cv2

def videocapture():
    cap=cv2.VideoCapture(0)     #生成读取摄像头对象
    width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))  #获取视频的宽度
    height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))  #获取视频的高度
    fps = cap.get(cv2.CAP_PROP_FPS) #获取视频的帧率
    fourcc = int(cap.get(cv2.CAP_PROP_FOURCC))    #视频的编码
    #定义视频对象输出
    writer = cv2.VideoWriter("video_result.mp4", fourcc, fps, (width, height))
    while cap.isOpened():
        ret, frame = cap.read() #读取摄像头画面
        cv2.imshow('video', frame) #显示画面
        key = cv2.waitKey(24)
        writer.write(frame)  #视频保存
        # 按Q退出
        if key == ord('q'):
            break
    cap.release()         #释放摄像头
    cv2.destroyAllWindows() #释放所有显示图像窗口

if __name__ == '__main__' :

    videocapture()

六、读取视频并按帧进行保存代码演示:

import numpy as np
import cv2
import os

def video2image(video_dir,save_dir):
    cap = cv2.VideoCapture(video_dir) #生成读取视频对象
    n = 1   #计数
    width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))    #获取视频的宽度
    height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))   #获取视频的高度
    fps = cap.get(cv2.CAP_PROP_FPS)    #获取视频的帧率
    fourcc = int(cap.get(cv2.CAP_PROP_FOURCC))    #视频的编码
    # 定义视频输出
    #writer = cv2.VideoWriter("video_02_result.mp4", fourcc, fps, (width, height))
    i = 0
    timeF = int(fps)     #视频帧计数间隔频率
    while cap.isOpened():
        ret,frame = cap.read() #按帧读取视频
        #到视频结尾时终止
        if ret is False :
            break
        #每隔timeF帧进行存储操作
        if (n % timeF == 0) :
            i += 1
            print('保存第 %s 张图像' % i)
            save_image_dir = os.path.join(save_dir,'%s.jpg' % i)
            print('save_image_dir: ', save_image_dir)
            cv2.imwrite(save_image_dir,frame) #保存视频帧图像
        n = n + 1
        cv2.waitKey(1) #延时1ms
    cap.release() #释放视频对象

#读取文件夹所有视频,每个视频按帧保存图像
def video2image_multi(video_path,save_path):
    video_list = os.listdir(video_path)
    
    for i in range(len(video_list)) :      
        video_dir = os.path.join(video_path,video_list[i])
        cap = cv2.VideoCapture(video_dir)
        fps = cap.get(cv2.CAP_PROP_FPS)     # 视频的帧率
        save_num = 0
        n = 1           #计数
        timeF = int(fps)          # 视频帧计数间隔频率
        while cap.isOpened():
            ret,frame = cap.read()
            if ret is False :
                break
            #每隔timeF帧进行存储操作
            if (n % timeF == 0) :
                save_num += 1
                save_image_dir = os.path.join(save_path,'%s_%s.jpg' % (i,save_num))
                cv2.imwrite(save_image_dir,frame)
            n = n + 1
            cv2.waitKey(1)
        cap.release()
        print('读取第 %s 个视频完成 !!!' % i)

if __name__ == '__main__' :

    video2image(r'E:\AI\video.mp4', r'E:\AI\video2image')

  • 96
    点赞
  • 557
    收藏
    觉得还不错? 一键收藏
  • 16
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值