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

标签:python,opencv,视频帧率
0
投稿

猜你喜欢

  • python中安装Scrapy模块依赖包汇总

    2023-11-08 07:06:25
  • python3 实现函数写文件路径的正确方法

    2023-12-09 11:38:51
  • 详解python中Numpy的属性与创建矩阵

    2023-08-29 03:35:17
  • padas 生成excel 增加sheet表的实例

    2023-03-22 04:52:04
  • Quoted-printable 编码介绍、Quoted-printable编码解码转换方法

    2022-02-20 07:46:05
  • 基于B-树和B+树的使用:数据搜索和数据库索引的详细介绍

    2024-01-19 01:28:16
  • Python多线程多进程实例对比解析

    2022-10-09 16:43:20
  • MySQL 视图,第1349号错误

    2008-05-18 13:04:00
  • IE6,7下实现white-space:pre-wrap;

    2009-12-31 18:30:00
  • python读取配置文件方式(ini、yaml、xml)

    2022-10-12 05:07:29
  • 详解Python函数式编程之装饰器

    2023-06-16 19:46:58
  • Python使用arrow库优雅地处理时间数据详解

    2023-02-26 07:14:12
  • python条件语句和while循环语句

    2023-08-31 06:17:56
  • Python 连接字符串(join %)

    2021-01-13 23:30:46
  • python 通过文件夹导入包的操作

    2023-03-10 12:48:24
  • python包相关知识点之包的导入、相对路径以及绝对路径

    2023-08-11 11:09:46
  • 利用SQL Server复制技术实现数据同步更新

    2009-10-23 14:11:00
  • PHP基于phpqrcode类生成二维码的方法示例详解

    2023-07-15 22:57:52
  • python实现合并两个数组的方法

    2022-05-30 21:40:11
  • 基于Python实现ComicReaper漫画自动爬取脚本过程解析

    2021-07-25 21:45:45
  • asp之家 网络编程 m.aspxhome.com