视频抽帧和图片合成视频

import cv2

# 读取视频
video = cv2.VideoCapture('input.mp4')  # 用你的视频文件名替换 'input.mp4'

count = 0
frame_skip = 3  # 每3帧保存一次

while True:
    success, frame = video.read()
    # 当读取不成功时,例如到达视频的结尾,退出循环
    if not success:
        break

    if count % frame_skip == 0:  # 每3帧保存一次
        cv2.imwrite('frame{}.jpg'.format(count), frame)
    count += 1

video.release()
cv2.destroyAllWindows()
import cv2
import os
import re

def atoi(text):
    return int(text) if text.isdigit() else text

def natural_keys(text):
    return [atoi(c) for c in re.split('(\d+)', text)]

image_folder = '.'  # 图片所在的文件夹
video_name = 'output.avi'

images = [img for img in os.listdir(image_folder) if img.endswith(".jpg")]
images.sort(key=natural_keys)

frame = cv2.imread(os.path.join(image_folder, images[0]))
height, width, layers = frame.shape

video = cv2.VideoWriter(video_name, 0, 1, (width,height))

for image in images:
    video.write(cv2.imread(os.path.join(image_folder, image)))

cv2.destroyAllWindows()
video.release()

'''
功能:将视频逐帧抽取,在文件夹中保存为图片,可设置间隔帧数进行抽取,可设置图片名
'''
 
 
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)

猜你喜欢

转载自blog.csdn.net/weixin_64043217/article/details/130769453