python-opencv视频抽帧并保存路径

#导入需要的库
import cv2
import os
import argparse
#avi视频位置\保存的图片位置\输出视频的名称,按照自己的路径修改
#avi_path = r'D:\tools\4154.avi'
#img_path = r'D:\tools\video'

#定义avi转img函数
def avi2img(avi_path,img_path):
    if os.path.exists(img_path) is False:
        os.makedirs(img_path)
    print(avi_path)
    cap=cv2.VideoCapture(avi_path) #读入一个视频,打开cap
    fps=cap.get(cv2.CAP_PROP_FPS) #获取视频的帧频
    isOpened=cap.isOpened #判断是否打开
    width=int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) #获取宽度
    height=int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) #获取高度
    n = int(cap.get(cv2.CAP_PROP_FRAME_COUNT)) #获取总帧数
    print(n)
    i=0
    #进入循环
    print("start")
    while(isOpened):
        #循环达到帧总数时退出
        if i==n:
            break
        else:
            i+=1
        (flag,frame)=cap.read() #读取每一帧,一张图像flag 表明是否读取成果frame内容
        if i%opt.skip_frame == 0:
            fileName = img_path+'\image'+str(i).zfill(4)+'.jpg' #要保存图片的名称
            #flag表示是否成功读图
            print(fileName)
            if flag==True:
                # cv2.IMWRITE_JPEG_QUALITY控制质量
                #cv2.imwrite(fileName,frame,[cv2.IMWRITE_JPEG_QUALITY,100]) #写入图片
                #支持中文路径写入
                cv2.imencode('.jpg', frame)[1].tofile(fileName)
                
                
if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('--avi_path', type=str, default='D:\\tools\\4154.avi', help='input path')
    parser.add_argument('--img_path', type=str, default='D:\\tools\\video', help='out path')
    parser.add_argument('--skip_frame', type=int, default=1, help='skip_frame')
    opt = parser.parse_args()
    avi_name =os.path.basename(opt.avi_path)
    avi_name = avi_name.split('.')[0]
    img_path = opt.img_path+'\\'+ avi_name
    avi2img(opt.avi_path,img_path) #使用函数

python .\video2img_skip_frame.py --avi_path D:\tools\4154.avi --skip_frame 24

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要打开并保存视频,您可以使用Python中的OpenCV库。以下是一个示例代码,展示了如何打开视频、逐帧读取视频、处理每一帧,并将处理后的帧保存为新的视频文件: ```python import cv2 # 打开原始视频文件 cap = cv2.VideoCapture('input_video.mp4') # 检查视频是否成功打开 if not cap.isOpened(): print("无法打开视频文件") exit() # 获取原始视频的基本信息 fps = cap.get(cv2.CAP_PROP_FPS) width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) # 创建VideoWriter对象,用于保存处理后的视频 fourcc = cv2.VideoWriter_fourcc(*'XVID') out = cv2.VideoWriter('output_video.avi', fourcc, fps, (width, height)) while True: # 逐帧读取视频 ret, frame = cap.read() # 检查是否到达视频末尾 if not ret: break # 在每一帧上进行处理(这里只是一个示例,您可以根据需要进行自定义操作) processed_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 将处理后的帧写入输出视频文件 out.write(processed_frame) # 在窗口中展示每一帧 cv2.imshow('Video', processed_frame) # 按下'q'键退出循环 if cv2.waitKey(1) & 0xFF == ord('q'): break # 释放cap和out对象,关闭窗口 cap.release() out.release() cv2.destroyAllWindows() ``` 请确保将代码中的`input_video.mp4`替换为实际的输入视频文件路径,将`output_video.avi`替换为您想要保存的输出视频文件路径。这段代码将逐帧读取输入视频,并在每一帧上进行处理(在示例中,将每一帧转换为灰度图像),最后将处理后的帧写入输出视频文件。同时,每一帧也会在一个窗口中展示出来。按下 'q' 键可以退出循环。 希望这可以满足您的需求!如有任何问题,请随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值