视频抽帧和图片合成视频

该代码示例展示了如何使用OpenCV库在Python中实现视频抽帧,将视频中的每一帧按照指定间隔保存为图片,并提供了两种不同的实现方式。此外,还介绍了如何将这些图片再合成为视频,设定帧率并保存。整个过程涉及视频读取、图像处理和视频写入操作。
摘要由CSDN通过智能技术生成
1.视频抽帧
'''
功能:将视频逐帧抽取,在文件夹中保存为图片,可设置间隔帧数进行抽取,可设置图片名
'''
 
import cv2
 
 
def video2images(Video_Dir):
    cap = cv2.VideoCapture(Video_Dir)
    c = 1  # 帧数起点
    index = 1  # 图片命名起点,如1.jpg
 
    if not cap.isOpened():
        print("Cannot open camera")
        exit()
 
    while True:
        # 逐帧捕获
        ret, frame = cap.read()
        # 如果正确读取帧,ret为True
        if not ret:
            print("Can't receive frame.")
            break
        # 设置每5帧取一次图片,若想逐帧抽取图片,可设置c % 1 == 0
        if c % 5 == 0:
            # 图片存放路径,即图片文件夹路径  路径不能出现中文
            cv2.imwrite("C:/Users/Desktop/class_actions/images/" + str(index) + '.jpg', frame)
            index += 1
        c += 1
        cv2.waitKey(1)
        # 按键停止
        if cv2.waitKey(1) == ord('q'):
            break
    cap.release()
 
 
# 视频存放路径 路径不能出现中文
Video_Dir = r"C:\Users\Desktop\class_actions\videos\1.mp4"
video2images(Video_Dir)

1.视频抽帧另一种方法

'''
功能:将视频逐帧抽取,在文件夹中保存为图片,可设置间隔帧数进行抽取,可设置图片名
'''
 
 
import cv2
 
def video2images(Video_Dir):
 
    cap = cv2.VideoCapture(Video_Dir)
    c = 1  # 帧数起点
    index = 1  # 图片命名起点,如1.jpg
 
    if not cap.isOpened():
        print("Cannot open camera")
        exit()
 
    while True:
        # 逐帧捕获
        ret, frame = cap.read()
        # 如果正确读取帧,ret为True
        if not ret:
            print("Can't receive frame.")
            break
        # 设置每5帧取一次图片,若想逐帧抽取图片,可设置c % 1 == 0
        if c % 5 == 0:
            # 图片存放路径,即图片文件夹路径
            cv2.imwrite('D:/mymodel/dataset/data/' + str(index) + '.jpg', frame) 
            index += 1
        c += 1
        cv2.waitKey(1)
        # 按键停止
        if cv2.waitKey(1) == ord('q'):
            break
    cap.release()
 
Video_Dir = "D:\mymodel\dataset\data.mp4"                # 视频存放路径
video2images(Video_Dir)

2.图片合成视频

import cv2  
import os  
  
def images_to_video(image_folder_path, output_video_name, fps):  
    images = [img for img in os.listdir(image_folder_path) if img.endswith(".png") or img.endswith(".jpg")]  
    frame = cv2.imread(os.path.join(image_folder_path, images[0]))  
    height, width, layers = frame.shape  
  
    video = cv2.VideoWriter(output_video_name, cv2.VideoWriter_fourcc(*'XVID'), fps, (width, height))  
  
    for image in images:  
        video.write(cv2.imread(os.path.join(image_folder_path, image)))  
  
    cv2.destroyAllWindows()  
    video.release()  
  
# 使用函数  
image_folder_path = "/home/uto/vis_1/vis_1/" # 请将这里替换为你的图片文件夹路径  
output_video_name = "/home/uto/vis_1/a.mp4" # 请将这里替换为你想要输出的视频文件名  
fps = 30 # 视频帧率,你可以根据需要调整  
images_to_video(image_folder_path, output_video_name, fps)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值