OpenCV——视频抽帧

# 导入所有必要的库
import cv2
import os

# 传入视频的名字,xxx.mp4
from tqdm import tqdm

def from_viedo_get_frame(video_name):
    # 路径定义
    pwd_dir=r"D:\desk\test_django\test\Videos\IR"
    video_dir=os.path.join(pwd_dir,"Videos")
    cut_images_dir=os.path.join(pwd_dir,"Cut_Images")
    # 保存图片名字
    img_name=video_name.split(".")[0]
    save_img_dir_p=os.path.join(cut_images_dir,img_name)
    save_img_dir=os.path.join(save_img_dir_p,"imgs")
    save_label_dir=os.path.join(save_img_dir_p,"labels")


    # 指定的路径读取视频
    cam = cv2.VideoCapture(os.path.join(video_dir,video_name))
    # 创建名为data的文件夹

    try:
        if not os.path.exists(save_img_dir):
            os.makedirs(save_img_dir)
        if not os.path.exists(save_label_dir):
            os.makedirs(save_label_dir)


    # 如果未创建,则引发错误
    except OSError:
        print('Error: Creating directory of data')

    # frame
    currentframe = 0

    while (True):

        # reading from frame
        ret, frame = cam.read()

        if ret:
            # 如果视频仍然存在,继续创建图像
            save_img_path=os.path.join(save_img_dir,"{}_{}.jpg".format(str(img_name),str(currentframe)))

            # 增加计数器,以便显示创建了多少帧
            currentframe += 1

            # 自定义隔多少帧抽一帧
            if currentframe % 1==0:
                # 写入提取的图像
                cv2.imwrite(save_img_path, frame)

        else:
            break
    # 一旦完成释放所有的空间和窗口
    cam.release()
    cv2.destroyAllWindows()
    
if __name__ == '__main__':
    # 需要被抽帧的视频
    video_list=["fushi_30_1.mp4","fushi_30_2.mp4","fushi_30_3.mp4","yangshi_30_1.mp4", "yuan2jing_1"]

    for video in tqdm(video_list):
        video_name=f"{video}.mp4"
        from_viedo_get_frame(video_name)

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
OpenCvSharp是一个基于OpenCV库的C#封装,提供了对图像和视频处理的功能。要在OpenCvSharp中实现视频抽帧,可以通过以下步骤: 1. 导入OpenCvSharp库:首先,需要在项目中导入OpenCvSharp库,可以通过NuGet包管理器进行安装。 2. 打开视频文件:使用CvCapture类打开视频文件,可以使用CvCapture.FromFile方法传入视频文件路径来实现。 3. 设置帧数间隔:通过Cv.QueryFrame方法获取每一帧图像,并使用cv.GetCaptureProperty方法获取视频的帧率。然后,根据需要设置一个帧数间隔,例如每隔5帧抽取一帧。 4. 抽取帧图像:使用Cv.QueryFrame方法获取每一帧图像。可以使用一个循环来不断遍历视频中的每一帧。 下面是一个简单的示例代码实现以上步骤: ```csharp using OpenCvSharp; class Program { static void Main(string[] args) { // 打开视频文件 using (var capture = CvCapture.FromFile("path/to/video/file.mp4")) { // 获取视频帧率 var fps = capture.Get(CaptureProperty.Fps); // 设置帧数间隔 int frameInterval = 5; int frameNumber = 0; // 不断遍历视频中的每一帧 while (true) { frameNumber++; // 获取每一帧图像 using (var frame = capture.QueryFrame()) { // 判断是否为空帧 if (frame == null) break; // 抽取帧图像 if (frameNumber % frameInterval == 0) { // 在这里进行帧图像的处理或保存操作 // 可以使用frame.Mat属性获取图像的Mat对象,然后进行进一步的操作 } } // 设置视频的下一帧 capture.Set(CaptureProperty.PosFrames, frameNumber); } } } } ``` 通过以上步骤,可以实现在OpenCvSharp中对视频进行抽帧操作。具体的帧图像处理或保存方法可以根据需求进行进一步的开发。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张飞飞飞飞飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值