本系列教程:Python玩转视频处理之opencv和moviepy介绍与简单使用

本系列教程会分享怎样用Python进行视频处理,在本文中,会先介绍opencv和moivepy这两个库,还会介绍它们的简单使用方法。

本系列教程:Python玩转视频处理之opencv和moviepy介绍与简单使用

1、opencv介绍及人脸识别

OpenCV全称为Open Source Computer Vision Library,它是一个跨平台的计算机视觉库,由英特尔公司发起并参与开发,以BSD许可证授权发行,能在商业和研究领域免费使用。

OpenCV能够用来开发程序,这些程序涉及实时的图像处理,还涉及计算机视觉,也涉及模式识别。

OpenCV主要是用C++语言来编写的,Python程序能够借助Python-OpenCV这个库来调用OpenCV的相关接口。

1.1 python-opencv的安装

使用pip install opencv-python这个命令来进行安装,安装结束后运行python,接着导入cv2,命令如下:

>>> import cv2

如无报错,说明安装成功。

1.2 人脸识别原理及使用

opencv具备十分强大的功能,在本文里,主要对其人脸识别功能加以介绍并予以使用,其完整功能可供参考

OpenCV采用的是基于Haar的cascade分类器,这种分类器是一种机器学习方法。Paul Viola和Michael Jone在2001年发表的论文“Rapid Object Detection using a Boosted Cascade of Simple Features”中提出了一种有效的物品检测方法,该方法是基于Haar特征的cascade分类器。它属于机器学习方法,借助众多正负样例来训练,从而得到cascade模型,之后把该模型应用到其他图片上。

针对不同物体,需要不同的分类器。OpenCV包含许多训练好的分类器,像脸、眼、微笑等。这些分类器是XML文件,存储在库安装文件夹cv2下面的data目录中,使用时能直接调取,也可从

使用OpenCV识别人脸有以下步骤,首先要进行初始化,接着要导入cv2等Python库,最后要加载分类器cascade文件。

进行图片预处理,读取图片,运用cvtColor函数把图片转换为灰度图;

进行人脸检测时,会运用detectMultiScale方法,该方法用于检测图片里的人脸。

比如这里需要从下图中识别人脸。

代码如下:

import numpy

import cv2

将haarcascade_frontalface_default.xml文件复制到当前所在的目录之中 。

# 或者指定该文件的完整路径

face_cascade被设置为cv2.CascadeClassifier,其参数为"haarcascade_frontalface_default.xml" 。

# 读取图片,使用*cvtColor*函数将图片转为灰度图

img = cv2.imread("girl.jpg")

gray是通过cv2.cvtColor函数,将img从BGR颜色空间转换为灰度颜色空间得到的结果 。

运用detectMultiScale方法,对图片当中的人脸予以检测。

faces 被 face_cascade.detectMultiScale 检测出来,该检测基于 gray,参数为 1.3 和 5 。

# 将人脸部分用长方形表示

print(faces)

for (x,y,w,h) in faces:

使用cv2.rectangle函数,在img图像上,绘制一个矩形,矩形左上角坐标为(x,y),右下角坐标为(x+w,y+h),颜色为(255,0,0),线条宽度为5 。

# 保存结果

cv2将img写入'result.jpg'文件中 。

效果如下:

2、moviepy介绍及视频截取

moviepy是一个用python编写的模块,可用于视频编辑,能对视频进行基础操作,如剪切、连接、插入标题等,还能进行视频创作,像非线性编辑,也可用于视频处理,以及给视频添加炫酷特效等,它能读写多数常见视频格式,包含GIF,在之前文章里曾用moviepy从视频截取片段生成gif表情

这里介绍一个能提升处理性能的从视频中截取片段的方法,这是一个基于ffmpeg的方法,该方法使用ffmpeg_extract_subclip来处理视频,具体如下:

从moviepy.video.io.ffmpeg_tools中导入ffmpeg_extract_subclip

使用ffmpeg_extract_subclip工具,从“full.mp4”文件中提取视频片段,提取的起始时间为60秒,结束时间为300秒,将提取后的视频片段保存为名为“cut.mp4”的文件。

其实这个方法就是调用ffmpeg命令处理视频,源代码如下:

定义一个函数,名为ffmpeg_extract_subclip,该函数有四个参数,分别是filename、t1、t2、targetname ,其中targetname参数的默认值为None 。

创建一个新的视频文件,该视频文件播放名为“filename”的视频文件,播放区间为

时间“t1”和“时间“t2” 。""" (此句英文表述不太完整准确,按要求改写后逻辑也较模糊,推测是尽量贴近原文形式改写)

将文件名进行路径分割,得到文件名和扩展名,分别存储在name和ext变量中 。

if not targetname:

T1等于对t1乘以1000后取整,T2等于对t2乘以1000后取整 。

targetname等于,由name、T1、T2、ext组成的字符串格式化后的结果,格式为%sSUB%d_%d.%s

cmd等于,获取设置的“FFMPEG_BINARY”,“-y”,

"-ss", "%0.2f"%t1,

"-i", filename,

"-t", "%0.2f"%(t2-t1),

把“-map”,“0”,“-vcodec”,“copy”,“-acodec”,“copy”,以及目标名称组合在一起

"-vcodec"参数的值为"copy","-acodec"参数的值为"copy",目标名称为targetname]

subprocess_call(cmd)

借助上面的方法,能够达成后面的功能,关于moviepy的完整教程可供参考 。

欢迎关注我的公众号“Python的乐趣”,原创的技术文章会在第一时间进行推送。

你可能想看:
« 上一篇
下一篇 »

相关推荐

python爬虫教程PDF,Python爬虫书PDF

2026年09月02日

32阅读

外国教程python,python编程教学视频

2026年09月02日

27阅读

python简明教程沈洁元,python详细基础教程

2026年09月02日

21阅读

python库包教程,python 包

2026年09月02日

27阅读

python教程大全集,python教程600集

2026年09月02日

27阅读

python入门教程完整版,python零基础入门全套教程视频

2026年09月02日

23阅读