巧妙使用python opencv库玩转视频帧率
作者:爱python的王三金 发布时间:2023-02-01 13:54:30
需求背景
在很多时候我们需要抽取视频的某一帧做一些分析或修改等;比如笔者需求就是判断一个人在该视频中出现的频率,以判断他是否是这段视频的主角;
关于opencv
OpenCV 是 Intel 开源计算机视觉库 (Computer Version) 。它由一系列 C 函数和少量 C++ 类构成,实现了图像处理和计算机视觉方面的很多通用算法。
OpenCV 拥有包括 300 多个 C 函数的跨平台的中、高层 API 。它不依赖于其它的外部库 —— 尽管也可以使用某些外部库。 OpenCV 对非商业应用和商业应用都是免费 的
。同时 OpenCV 提供了对硬件的访问,可以直接访问摄像头,并且 opencv 还提供了一个简单的 GUI(graphics user interface) 系统 :highgui 。 我们就通过 OpenCV 提供的一些方法来构造出这个人脸检测 ( face detection ) 程序来。
安装opencv
pip install opencv-python
用opencv按一定间隔截取视频帧,并保存为图片。
这个例子使用python编程:
代码:
# -*- coding:utf8 -*-
import cv2
import os
import shutil
def VideoExtract(filename, count=600):
'''
:param filename: 视频文件路径
:param count: 保存图片的帧率间隔
:return:
'''
# 保存图片的路径
savedpath = filename.split('.')[0] + '/'
isExists = os.path.exists(savedpath)
if not isExists:
os.makedirs(savedpath)
print('path of %s is build' % (savedpath))
else:
shutil.rmtree(savedpath)
os.makedirs(savedpath)
print('path of %s already exist and rebuild' % (savedpath))
# 开始读视频
videoCapture = cv2.VideoCapture(filename)
i = 0
j = 0
while True:
success, frame = videoCapture.read()
i += 1
if (i % count == 0):
# 保存图片
j += 1
savedname = filename.split('.')[0] + '_' + str(j) + '_' + str(i) + '.jpg'
cv2.imwrite(savedpath + savedname, frame)
print('image of %s is saved' % (savedname))
if not success:
break
运行完成后在生成的图片文件夹中会写入很多图片,也就是我们刚刚每个count帧抽出的画面
根据这个抽帧情况来看该视频主角应该就是TRUMP
了;
抽帧之前当然要做一些视频属性的判断,如视频时长、视频大小等
cap = cv2.VideoCapture(video_name)
# 帧率
fps = int(round(cap.get(cv2.CAP_PROP_FPS)))
# 分辨率-宽度
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
# 分辨率-高度
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
# 总帧数
frame_counter = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
cap.release()
cv2.destroyAllWindows()
# 时长,单位s
duration = frame_counter / fps
opencv-python获取视频相关信息
以下是opencv-python可以获取视频的相关信息,可以通过从0开始的序号获取
CV_CAP_PROP_POS_MSEC
视频文件的当前位置(以毫秒为单位)或视频捕获时间戳。
CV_CAP_PROP_POS_FRAMES
接下来要解码/捕获的帧的基于0的索引。
CV_CAP_PROP_POS_AVI_RATIO
视频文件的相对位置:0 - 电影的开始,1 - 电影的结尾。
CV_CAP_PROP_FRAME_WIDTH
视频流中帧的宽度。
CV_CAP_PROP_FRAME_HEIGHT
视频流中帧的高度。
CV_CAP_PROP_FPS
帧速率。
CV_CAP_PROP_FOURCC
编解码器的4字符代码。
CV_CAP_PROP_FRAME_COUNT
视频文件中的帧数。
CV_CAP_PROP_FORMAT
返回的Mat对象的格式 retrieve() 。
CV_CAP_PROP_MODE
指示当前捕获模式的特定于后端的值。
CV_CAP_PROP_BRIGHTNESS
图像的亮度(仅适用于相机)。
CV_CAP_PROP_CONTRAST
图像对比度(仅适用于相机)。
CV_CAP_PROP_SATURATION
图像的饱和度(仅适用于相机)。
CV_CAP_PROP_HUE
图像的色调(仅适用于相机)。
CV_CAP_PROP_GAIN
图像的增益(仅适用于相机)。
CV_CAP_PROP_EXPOSURE
曝光(仅适用于相机)。
CV_CAP_PROP_CONVERT_RGB
布尔标志,指示是否应将图像转换为RGB。
CV_CAP_PROP_WHITE_BALANCE_U
白平衡设置的U值(注意:目前仅支持DC1394 v 2.x后端)
CV_CAP_PROP_WHITE_BALANCE_V
白平衡设置的V值(注意:目前仅支持DC1394 v 2.x后端)
CV_CAP_PROP_RECTIFICATION
立体摄像机的整流标志(注意:目前仅支持DC1394 v 2.x后端)
CV_CAP_PROP_ISO_SPEED
摄像机 的ISO速度(注意:目前仅支持DC1394 v 2.x后端)
CV_CAP_PROP_BUFFERSIZE
存储在内部缓冲存储器中的帧数(注意:目前仅支持DC1394 v 2.x后端)
来源:https://blog.csdn.net/qq_37275405/article/details/103219821
猜你喜欢
- 前言:目前在研究易信公众号,想给公众号增加一个获取个人交通违章的查询菜单,通过点击返回查询数据。以下是实施过程。一、首先,用火狐浏览器打开X
- 本文实例讲述了Python扫描IP段查看指定端口是否开放的方法。分享给大家供大家参考。具体实现方法如下:#!/usr/local/bin/p
- 平时制作页面中可对属性list-style在list-item对象中常用,但用的都不深。一般都设为none重置整个页面就差不多OK,可能很多
- 为什么传输几千个表的数据时向导会失败?当前的向导体系结构会创建一个 DTS 软件包数据流以传输数据。但如果要处理几千个表,则会遇到可伸缩性限
- 本文实例为大家分享了python dlib人脸识别的具体代码,供大家参考,具体内容如下import matplotlib.pyplot as
- 目录前言示例文件文件编码空值日期错误函数映射方法1:直接使用labmda表达式方法二:使用自定义函数方法三:使用数值字典映射总结前言本文是给
- 本文实例讲述了Python操作串口的方法。分享给大家供大家参考。具体如下:首先需确保安装了serial模块,如果没安装的话就安装一下pyth
- 今天帮一同学导入一个excel数据,我把excel保存为txt格式,然后建表导入,失败!分隔符格式不匹配,无法导入!!!!怎么看两边都是\t
- 概述我在教学和实际设计中的一些心得。就不长篇大论了!让大家省些时间,捞干的。尽量通俗易懂。想知道怎样设计标志,就要知道什么是标志?标志:外来
- 我就废话不多说了,大家还是直接看代码吧~# 两个依赖包: sasl&thriftThe easier way I find to i
- SSI是英文Server Side Includes的缩写,翻译成中文就是服务器端包含的意思。从技术角度上说,SSI就是在HTML文件中,可
- 本文实例总结了Python列表list常用内建函数。分享给大家供大家参考,具体如下:>>> x = list(range(
- 此文译自Fred Wilson 2010年2月在迈阿密举行的Web未来应用的年会上的演讲谢谢青云推荐了这篇这么好的演说谢谢卓和百忙中抽空帮我
- 在输入框里面预设一段提示文字,当焦点在输入框的时候清空这段文字,这在目前来说已经不是什么新鲜事了。淘宝的搜索框就用到了这样一种设计:这种设计
- 在表中有两个字段:id_no (varchar) , in_date (datetime) ,把in_date相同的记录的in_date依次
- <?php function genpage(&$sql,$page_size=10) { global $pages,$su
- 如下所示:两个函数:Basemap.drawparallels ##纬度 Basemap.drawmeridia
- 一年一度的双十一就快到了,各种砍价、盖楼、挖现金的口令将在未来一个月内充斥朋友圈、微信群中。玩过多次双十一活动的小编表示一顿操作猛如虎,一看
- xhEditor简介xhEditor是一个基于jQuery开发的简单迷你并且高效的可视化HTML编辑器,基于网络访问并且兼容IE 6.0+,
- 本文实例为大家分享了python3实现多张图片附件邮件发送的具体代码,供大家参考,具体内容如下直接上代码,没有注释!from email.m