脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|shell|

服务器之家 - 脚本之家 - Python - 巧妙使用python opencv库玩转视频帧率

巧妙使用python opencv库玩转视频帧率

2022-12-07 10:52爱python的王三金 Python

这篇文章主要介绍了巧妙使用python opencv库玩转视频帧率的教程示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

需求背景

在很多时候我们需要抽取视频的某一帧做一些分析或修改等;比如笔者需求就是判断一个人在该视频中出现的频率,以判断他是否是这段视频的主角;

关于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编程:

代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# -*- 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了;

抽帧之前当然要做一些视频属性的判断,如视频时长、视频大小等

?
1
2
3
4
5
6
7
8
9
10
11
12
13
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后端)

以上就是巧妙使用python opencv库玩转视频帧率的详细内容,更多关于python opencv库玩转视频帧率的资料请关注服务器之家其它相关文章!

原文链接:https://blog.csdn.net/qq_37275405/article/details/103219821

延伸 · 阅读

精彩推荐
  • Pythonpandas参数设置的实用小技巧

    pandas参数设置的实用小技巧

    这篇文章主要给大家介绍了关于pandas参数设置的实用小技巧,文中通过实例代码结束的非常详细,对大家学习或者使用pandas具有一定的参考学习价值,需要...

    费弗里2682020-08-24
  • Python对python中的for循环和range内置函数详解

    对python中的for循环和range内置函数详解

    下面小编就为大家分享一篇对python中的for循环和range内置函数详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    practice_perfect9842021-02-01
  • Pythonpython 堆和优先队列的使用详解

    python 堆和优先队列的使用详解

    这篇文章主要介绍了python 堆和优先队列的使用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    LIUHUANUCAS4062021-06-04
  • Pythonmac下pycharm设置python版本的图文教程

    mac下pycharm设置python版本的图文教程

    今天小编就为大家分享一篇mac下pycharm设置python版本的图文教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    alpa14032021-03-04
  • Pythonpython Matplotlib数据可视化(1):简单入门

    python Matplotlib数据可视化(1):简单入门

    这篇文章主要介绍了python Matplotlib的相关资料,帮助大家入门matplotlib,绘制各种图表,感兴趣的朋友可以了解下...

    奥辰4922020-09-30
  • PythonPython中使用haystack实现django全文检索搜索引擎功能

    Python中使用haystack实现django全文检索搜索引擎功能

    django是python语言的一个web框架,功能强大。配合一些插件可为web网站很方便地添加搜索功能。下面通过本文给大家分享Python中使用haystack实现django全文检索...

    aaanthony4052020-12-04
  • Pythonpython中的二维列表实例详解

    python中的二维列表实例详解

    这篇文章主要介绍了python中的二维列表实例详解,文中给大家介绍了python 二维列表按列取元素的方法,需要的朋友可以参考下...

    xiaotao_110902021-03-06
  • Pythonpython数据可视化绘制火山图示例

    python数据可视化绘制火山图示例

    这篇文章主要为大家介绍了python数据可视化绘制火山图示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪...

    Z_Y_H7462022-06-26