从视频截取每一帧作为图像
查看视频有多少帧
import cv2def count_frames_per_second(video_path):cap = cv2.VideoCapture(video_path)if not cap.isOpened():print("Error: Could not open video")return None# Get frames per secondfps = cap.get(cv2.CAP_PROP_FPS)# Get total number of framestotal_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))# Calculate total time in secondstotal_time_seconds = total_frames / fps if fps > 0 else 0# Convert total time to minutes and seconds for better readabilitytotal_minutes = total_time_seconds // 60total_seconds = total_time_seconds % 60print(f"Frames per second: {fps}")print(f"Total frames in the video: {total_frames}")print(f"Total time of the video: {int(total_minutes)} minutes and {total_seconds:.2f} seconds")cap.release()return fps, total_frames, total_time_seconds# Example usage
video_path = "D:\\WorkSpace\\pitaya_video\\video\\VID_20241015_082527.mp4" # Change this to your video file path
count_frames_per_second(video_path)
单个视频
import cv2
import osdef capture_frames(video_path,save_frame_path):# Get the video name without extensionvideo_name,suffix_mp4 = os.path.splitext(os.path.basename(video_path)) # Create a directory to save framesframes_dir = os.path.join(save_frame_path, video_name)os.makedirs(frames_dir, exist_ok=True)# Open the video filecap = cv2.VideoCapture(video_path)if not cap.isOpened():print(f"Error: Could not open video file {video_path}")returnframe_count = 0while True:# Read a frame from the videoret, frame = cap.read()# Break the loop if there are no more framesif not ret:break# Save the frame as an image fileframe_filename = os.path.join(frames_dir, f"{video_name}_frame_{frame_count:04d}.jpg")cv2.imwrite(frame_filename, frame)print(f"Saved {frame_filename}")frame_count += 1# Release the video capture objectcap.release()print(f"Total frames saved: {frame_count}")# Example usage
video_file_path = "D:\\WorkSpace\\pitaya_video\\video" # Replace with your video file path
video_file_path = os.path.join(video_file_path,"VID_20241015_082527.mp4")
save_frame_path = "D:\\WorkSpace\\pitaya_video\\all_image"
capture_frames(video_file_path,save_frame_path)
多个视频
import cv2
import osdef capture_frames_from_videos(video_directory,save_frame_path):# List all video files in the specified directoryvideo_files = [f for f in os.listdir(video_directory) if f.endswith('.mp4')]for video_file in video_files:video_path = os.path.join(video_directory, video_file)print(f"Processing video: {video_path}")# Get the video name without extensionvideo_name, suffix_mp4= os.path.splitext(video_file)# Create a directory to save framesframes_dir = os.path.join(save_frame_path, video_name)os.makedirs(frames_dir, exist_ok=True)# Open the video filecap = cv2.VideoCapture(video_path)if not cap.isOpened():print(f"Error: Could not open video file {video_path}")continueframe_count = 0while True:# Read a frame from the videoret, frame = cap.read()# Break the loop if there are no more framesif not ret:break# Save the frame as an image fileframe_filename = os.path.join(frames_dir, f"{video_name}_frame_{frame_count:04d}.jpg")cv2.imwrite(frame_filename, frame)print(f"Saved {frame_filename}")frame_count += 1# Release the video capture objectcap.release()print(f"Total frames saved for {video_file}: {frame_count}")# Example usage
video_directory = "D:\\WorkSpace\\pitaya_video\\video" # Replace with your video directory path
save_frame_path = "D:\\WorkSpace\\pitaya_video\\all_image"
capture_frames_from_videos(video_directory,save_frame_path)
一秒截取3帧
import cv2
import osdef capture_frames_from_videos(video_directory, save_frame_path):# List all video files in the specified directoryvideo_files = [f for f in os.listdir(video_directory) if f.endswith('.mp4')]for video_file in video_files:video_path = os.path.join(video_directory, video_file)print(f"Processing video: {video_path}")# Get the video name without extensionvideo_name, _ = os.path.splitext(video_file)# Create a directory to save framesframes_dir = os.path.join(save_frame_path, video_name)os.makedirs(frames_dir, exist_ok=True)# Open the video filecap = cv2.VideoCapture(video_path)if not cap.isOpened():print(f"Error: Could not open video file {video_path}")continue# Get the frames per second (fps) of the videofps = cap.get(cv2.CAP_PROP_FPS)print(f"Frames per second: {fps}")# Calculate the interval to capture 3 frames per secondframe_interval = max(int(fps / 3), 1) # Ensure at least one frame intervalframe_count = 0saved_frame_count = 0while True:# Read a frame from the videoret, frame = cap.read()# Break the loop if there are no more framesif not ret:break# Save the frame at specific intervalsif frame_count % frame_interval == 0:frame_filename = os.path.join(frames_dir, f"{video_name}_frame_{saved_frame_count:04d}.jpg")cv2.imwrite(frame_filename, frame)print(f"Saved {frame_filename}")saved_frame_count += 1frame_count += 1# Release the video capture objectcap.release()print(f"Total frames saved for {video_file}: {saved_frame_count}")# Example usage
video_directory = "D:\\WorkSpace\\pitaya_video\\video" # Replace with your video directory path
save_frame_path = "D:\\WorkSpace\\pitaya_video\\all_image" # Replace with your desired output path
capture_frames_from_videos(video_directory, save_frame_path)
相关文章:
从视频截取每一帧作为图像
查看视频有多少帧 import cv2def count_frames_per_second(video_path):cap cv2.VideoCapture(video_path)if not cap.isOpened():print("Error: Could not open video")return None# Get frames per secondfps cap.get(cv2.CAP_PROP_FPS)# Get total number of f…...
终端 数据表格
// // Created by HongDaYu on 17 十月 2024. //#ifndef HDYSDK_UTIL_H #define HDYSDK_UTIL_H#include <cstdint> #include <string> #include <list> #include <iomanip> #include <memory>class dataGrid { private:std::list<const char*…...
2.4.ReactOS系统运行级别降低IRQL级别KfLowerIrql 函数
2.4.ReactOS系统运行级别降低IRQL级别KfLowerIrql 函数 2.4.ReactOS系统运行级别降低IRQL级别KfLowerIrql 函数 文章目录 2.4.ReactOS系统运行级别降低IRQL级别KfLowerIrql 函数KfLowerIrql 函数 KfLowerIrql 函数 /*******************************************************…...
数字后端实现静态时序分析STA Timing Signoff之min period violation
今天给大家分享一个在高性能数字IC后端实现timing signoff阶段经常遇到的min period violation。大部分时候出现memory min period问题基本上都是需要返工重新生成memory的。这是非常致命的错误,希望大家在做静态时序分析时一定要查看min period violation。 什么是…...
phpstorm+phpstudy 配置xdebug(无需开启浏览器扩展)
今天又被xdebug折磨了,忘记了以前咋配置了现在百度发现好多都是各种浏览器扩展而且也没有真正的用到项目上的都是测试的地址怎么样的 我就简单写一下自己实战吧 不支持workerman swoole hyperf等这种服务框架 如果你会请教教我 工具版本phpstudy8.1.xphpstorm2021.x…...
AI赋能安全运营 | 赛宁网安深度参与四川省网络安全沙龙
为促进四川省、市网络安全公共服务领域的经验交流与深入探讨,打通网络安全供需上下游,加速汇聚省、市优质网络安全设备和服务资源,提升巴中市乃至四川省网络安全防护水平,共同推动四川省网络安全事业的蓬勃发展。 2024年10月15日…...
R语言中,.RData 和 .rds 的区别
.RData 和 .rds 是 R 语言中两种不同的数据保存格式,二者有一些关键的区别: 1. 存储内容的类型: .RData 文件:可以同时保存多个对象(如数据框、向量、列表等),当你加载 .RData 文件时…...
python实现录屏功能
python实现录屏功能 将生成的avi文件转为mp4格式后删掉avi文件 参考感谢:https://www.cnblogs.com/peachh/p/16549254.html import os import cv2 import time import threading import numpy as np from PIL import ImageGrab from pynput import keyboard from da…...
酷克数据出席2024金融业数据库技术大会
10月16日,由中国金融电子化集团指导,北京金融信息化研究所主办的“2024金融业数据库技术大会”在京顺利召开。本次大会以“大模型时代下的数据库创新发展”为主题,汇聚了来自管理部门、金融机构、科技企业以及学术研究机构的众多专家学者&…...
find_library、pkg_check_modules、pkg_search_module的区别
在CMake中,find_library、pkg_check_modules和pkg_search_module是用于查找和使用库的三种不同命令。以下是具体介绍: find_library 功能:find_library用于查找指定的库文件(动态库或静态库),不依赖于库提供…...
多jdk版本环境下,jenkins系统设置需指定JAVA_HOME环境变量
一、背景 由于不同项目对jdk版本的要求不同,有些是要求jdk11,有些只需要jdk8即可。 而linux机器上安装jdk的方式又多种多样,最后导致jenkins打包到底使用的是哪个jdk,比较混乱。 1、java在哪 > whereis java java: /usr/bin/…...
Java mybatis day1015
ok了家人们,今天学习了mybatis这个框架,我们一起去看看吧 一.Mybatis简介 1.1 Mybatis概述 MyBatis 最初是 Apache 的一个开源项目 iBatis, 2010 年 6 月 这个项目由 Apache Software Foundation 迁移到了 Google Code 。随着开发团队转投 Google Cod…...
音乐播放器项目专栏介绍
1.简介 本专栏使用Qt QWidget作为显示界面,你将会学习到以下内容: 1.大量ui美化的实例。 2.各种复杂ui布局。 3.常见显示效果实现。 4.大量QSS实例。 5.Qt音频播放,音乐歌词文件加载,展示。 6.播放器界面换肤。 相信学习了本专栏…...
如何修改SpringBoot内置容器默认上下文
引言 默认情况下,Spring boot 应用程序通过上下文路径“/”访问,这是嵌入式服务器的默认设置,即我们可以直接通过http://localhost:8080/访问该应用程序。 但是在生产环境中部署 Spring Boot 应用程序时,指定上下文路径是一个常…...
R语言详解predict函数
R语言中predict函数在建立模型,研究关系时常用。但是不同type得到的结果常常被混为一谈,接下来,探讨predict得到的不同结果。 #数据 set.seed(123) n<-1000 age<-rnorm(n,mean50,sd10) gender<-rbinom(n,1,0.5) disease<-rbinom…...
QT 实现随机码验证
1.界面实现效果 以下是具体的项目需要用到的效果展示,用于验证字母。 2.简介 自定义CaptchaMovableLabel,继承自QLabel类: 中间的4个字母,就是CaptchaMovableLabel类来实例化的对象。 主要功能如下: 1.显示字母&am…...
集合框架12:Set集合概述、Set接口使用
视频链接:13.24 Set接口使用_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1zD4y1Q7Fw?spm_id_from333.788.videopod.episodes&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5&p24 1、Set集合概述 特点:无序、无下标,元素不可…...
如何打开荣耀手机的调试模式?
问题描述: 最近用荣耀手机进行测试,打开开发者选项,打开USB调试,在选择USB配置时,发现仅有选择USB以太网才可以连接Android Studio,也就是打开ADB调试模式。 但是,打开USB以太网后,…...
Meta新模型Dualformer:融合快慢思维,推理能力媲美人脑
Meta 的 FAIR 团队最近推出了一款名为 Dualformer 的全新 Transformer 模型,该模型模仿人类的双重认知系统,能够无缝整合快速和慢速推理模式,在推理能力和计算效率上取得了显著突破。 人类的思维过程通常被认为是由两种系统控制的:系统1快速…...
CDGA|数据治理:如何让传统行业实现数据智能
在当今这个数字化时代,数据已成为推动各行各业转型升级的关键力量。对于传统行业而言,如何从海量、复杂的数据中挖掘价值,实现“数据智能”,成为了提升竞争力、优化运营效率、创新业务模式的重要途径。本文将探讨数据治理如何助力…...
C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...
Webpack性能优化:构建速度与体积优化策略
一、构建速度优化 1、升级Webpack和Node.js 优化效果:Webpack 4比Webpack 3构建时间降低60%-98%。原因: V8引擎优化(for of替代forEach、Map/Set替代Object)。默认使用更快的md4哈希算法。AST直接从Loa…...
Caliper 配置文件解析:fisco-bcos.json
config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...
SpringAI实战:ChatModel智能对话全解
一、引言:Spring AI 与 Chat Model 的核心价值 🚀 在 Java 生态中集成大模型能力,Spring AI 提供了高效的解决方案 🤖。其中 Chat Model 作为核心交互组件,通过标准化接口简化了与大语言模型(LLM࿰…...
Elastic 获得 AWS 教育 ISV 合作伙伴资质,进一步增强教育解决方案产品组合
作者:来自 Elastic Udayasimha Theepireddy (Uday), Brian Bergholm, Marianna Jonsdottir 通过搜索 AI 和云创新推动教育领域的数字化转型。 我们非常高兴地宣布,Elastic 已获得 AWS 教育 ISV 合作伙伴资质。这一重要认证表明,Elastic 作为 …...
算法打卡第18天
从中序与后序遍历序列构造二叉树 (力扣106题) 给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。 示例 1: 输入:inorder [9,3,15,20,7…...
李沐--动手学深度学习--GRU
1.GRU从零开始实现 #9.1.2GRU从零开始实现 import torch from torch import nn from d2l import torch as d2l#首先读取 8.5节中使用的时间机器数据集 batch_size,num_steps 32,35 train_iter,vocab d2l.load_data_time_machine(batch_size,num_steps) #初始化模型参数 def …...
