批量抽取视频帧,制作数据集

import cv2
import os

class VideoFrameExtractor:
    def __init__(self, video_folder, output_folder, frame_interval):
        self.video_folder = video_folder
        self.output_folder = output_folder
        self.frame_interval = frame_interval
        self.save_nums = 0

    def extract_frames(self, video_path):
        cap = cv2.VideoCapture(video_path)
        if not cap.isOpened():
            print("无法打开视频文件")
            return

        frame_count = 0
        while True:
            ret, frame = cap.read()
            if not ret:
                break

            if frame_count % self.frame_interval == 0:
                output_path = os.path.join(self.output_folder, f"frame_{self.save_nums}.png")
                cv2.imwrite(output_path, frame)
                self.save_nums += 1

            frame_count += 1

        cap.release()
        print(f"从视频中提取了{int(frame_count / frame_interval)}帧图像")

    def process_videos(self):
        for video_file in os.listdir(self.video_folder):
            if video_file.endswith(('.mp4', '.avi', '.mkv')):
                video_path = os.path.join(self.video_folder, video_file)
                print(f"处理视频:{video_path}")
                self.extract_frames(video_path)

if __name__ == "__main__":
    video_folder = "video"      # 视频路径,里面可以存放多个视频
    output_folder = "dataset"   # 保存图像的路径
    frame_interval = 10         # 每隔多少帧抽取一张图像

    extractor = VideoFrameExtractor(video_folder, output_folder, frame_interval)
    extractor.process_videos()
  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值