巧妙使用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


猜你喜欢
- 1. 首先,你需要安装最新的服务包为了提高服务器安全性,最有效的一个方法就是升级到SQL Server 2000 Service Pack
- 在上篇文章中,讲解了MongoDB的基本操作,包括增、删、改、查,但是这些操作都是在命令行模式下进行的,这篇文章中讲解如何使用C#程序连接到
- 1. rangerange是python内置的一个类,该类型表示一个不可改变(immutable)的数字序列,常常用于在for循环中迭代一组
- 许多网页开发者想从ASP.NET 页面传递一个值到另一个页面(比如从一个框架frame页面到一个弹窗页面)。看了代码就明白了。呵呵。(一)向
- 所有的计算机程序都可以大致分为两类:脚本型(单次运行)和连续运行型(直到用户主动退出)。脚本型:脚本型的程序包括最早的批处理文件以及使用Py
- 引言通常,您可能希望在 Pandas DataFrame 中插入一个新列。幸运的是,使用 pandas insert()函数很容易做到这一点
- HTML5本地存储初探(二)完成了数据的本地存储,就要将文件存储也搞定。为了实现文件的本地存储,html5搞了一个叫 manifest 的文
- 说到客户端数据存储,可能第一时间想到的是cookies,这是一种网站常见的存储数据的方法。它的最大优点是兼容性好,几乎所有浏览器都具有这个功
- 前言:func DeepEqual(x, y interface{}) boolDeepEqual 函数的参数是两个 i
- 效果图:搜索分类2种情况,一般的是当用户输入完,点击确定的按钮在向后发送请求,还有一种就是的我一边输入,一边向后台发送请求,但是会产生一个性
- 我们有下面一张PDF格式存储的表格,现在需要使用Python将它提取出来。使用Python提取表格数据需要使用pdfplumber模块,打开
- 1. position:static所有元素的默认定位都是:position:static,这意味着元素没有被定位,而且在文档中出现在它应该
- 最近在看python的算法书,之前在年前买的书,一直在工作间隙的时候,学习充电,终于看到这本书,但是确实又有点难,感觉作者写的代码太炫技 了
- 本文实例讲述了JS简单随机数生成方法。分享给大家供大家参考,具体如下:<!doctype html><html>&l
- 手痒痒系列之简单的放大镜写了个放大镜功能,可以设置显示的宽高width,height显示的位置,float ‘left’ 'righ
- 首先了解python对象的概念python中,万物皆对象,所有的操作都是针对对象的。 那什么是对象?5是一个int对象,‘oblong
- 在这可以用join()函数'x'.join(y),x可以是任意分割字符,y是列表或元组。以列表为例,可以将列表中的每一个元素
- Vue3中文文档Vue3.0对比Vue2.x优势框架内部做了大量的性能优化,包括:虚拟dom,编译模板,Proxy的新数据监听,更小的打包文
- 1.条件语句几个注意点和C#不一样的。if a < 5 { return 0} else {
- 使用Python编写探测WAF指纹脚本,再结合到Sqlmap中,这样以后再探测网站时,如果识别到此WAF指纹,就会显示出来。编写探测识别WA