目录
需求背景关于opencv安装opencvopencv-python获取视频相关信息需求背景
在很多时候我们需要抽取视频的某一帧做一些分析或修改等;比如笔者需求就是判断一个人在该视频中出现的频率,以判断他是否是这段视频的主角;
关于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后端)
以上就是巧妙使用python opencv库玩转视频帧率的详细内容,更多关于python opencv库玩转视频帧率的资料请关注脚本之家其它相关文章!
X 关闭
X 关闭

