Python OpenCV获取视频的方法


Posted in Python onFebruary 28, 2018

之前有文章,使用Android平台的OpenCV接入了视频,控制的目标是手机的摄像头,这是OpenCV的好处,使用OpenCV可以使用跨平台的接口实现相同的功能,减少了平台间移植的困难。正如本文后面,将使用类似的接口,从笔记本的摄像头获取视频,所以,尝试本文代码需要有一台有摄像头的电脑。

不过,需要说明的的是,OpenCV的强项在于图像相关的处理,而不是视频的编解码,所以,不要使用OpenCV做多余的事情,我们使用OpenCV接入视频或者图片的目的,是为了对视频或图片进行处理。

关于Python下配置OpenCV的过程,由于不能直接使用pip进行安装,过程相对复杂一些,不过,网上文章很多,多查阅一些资料,需要注意的是,要清楚自己的Python的版本,Python2和Python3的配置方法不同。

本节实现的是使用内建摄像头捕获视频,并显示视频的每一帧以实现视频的播放。

  1. 创建摄像头对象,指向文件
  2. 逐帧显示实现视频播放

下面进入我们的主题,配置好OpenCV以后,创建一个video_capture.py文件,内容如下:

#!/usr/bin/env python3 
import cv2 
 
#创建显示视频的窗口 
cv2.namedWindow('Video') 
 
#打开摄像头 
video_capture = cv2.VideoCapture(0) 
 
#创建视频写入对象 
video_writer = cv2.VideoWriter('test.avi', 
                cv2.VideoWriter_fourcc('M', 'J', 'P', 'G'), 
                video_capture.get(cv2.CAP_PROP_FPS), 
                (int(video_capture.get(cv2.CAP_PROP_FRAME_WIDTH)), 
                int(video_capture.get(cv2.CAP_PROP_FRAME_HEIGHT)))) 
 
#读取视频帧,对视频帧进行高斯模糊,然后写入文件并在窗口显示 
success, frame = video_capture.read() 
while success and not cv2.waitKey(1) == 27: 
  blur_frame = cv2.GaussianBlur(frame, (3, 3), 0) 
  video_writer.write(blur_frame) 
  cv2.imshow("Video", blur_frame) 
  success, frame = video_capture.read() 
 
#回收资源 
cv2.destroyWindow('Video') 
video_capture.release()

我们来仔细看一下,Python OpenCV的模块名称是cv2,所以我们导入模块cv2,接下来,准备了显示视频帧的窗口。

获取摄像头视频使用VideoCapture类,其构造参数为摄像头的index,笔记本只有一个摄像头,其index为0;将视频帧写入文件使用VideoWriter类,其构造参数分别为写入的文件路径名,编码格式,帧率以及视频尺寸,我们这里的帧率和视频尺寸使用了摄像头提供的参数,这可以通过VideoCapture获取。

万事俱备,我们可以调用VideoCapture.read()按帧读取数据,每一帧视频就是一幅图像,我们对其进行高斯模糊,然后将其写入文件,并显示在窗口上。

我们在点击Esc时会退出视频预览和录制,之后销毁窗口并释放摄像头。

可以看到,Python的OpenCV依然表现出了Python代码的简洁性,这为我们提供了一种开发思路,可以在研究阶段使用Python,实现中使用C++实现。当然,如果对Python足够信任,完全可以直接使用Python,Python的OpenCV只是一套接口,真正的OpenCV代码是用C++实现的,其性能足够好,Python调用C/C++代码的效率也是不错的。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
使用Python进行稳定可靠的文件操作详解
Dec 31 Python
python获取mp3文件信息的方法
Jun 15 Python
Python字符串切片操作知识详解
Mar 28 Python
Python实现上下班抢个顺风单脚本
Feb 07 Python
python随机取list中的元素方法
Apr 08 Python
Python实现输入二叉树的先序和中序遍历,再输出后序遍历操作示例
Jul 27 Python
通过 Python 和 OpenCV 实现目标数量监控
Jan 05 Python
Python集成开发工具Pycharm的安装和使用详解
Mar 18 Python
PyCharm最新激活码(2020/10/27全网最新)
Oct 27 Python
python中yield的用法详解
Jan 13 Python
聊一聊python常用的编程模块
May 14 Python
OpenCV-Python实现怀旧滤镜与连环画滤镜
Jun 09 Python
python实现多线程行情抓取工具的方法
Feb 28 #Python
Python 记录日志的灵活性和可配置性介绍
Feb 27 #Python
python定向爬取淘宝商品价格
Feb 27 #Python
python抓取文件夹的所有文件
Feb 27 #Python
python数据分析数据标准化及离散化详解
Feb 26 #Python
批量将ppt转换为pdf的Python代码 只要27行!
Feb 26 #Python
python 3利用Dlib 19.7实现摄像头人脸检测特征点标定
Feb 26 #Python
You might like
SONY SRF-22W(33W)的电路分析和维修案例
2021/03/02 无线电
php中用加号与用array_merge合并数组的区别深入分析
2013/06/03 PHP
ThinkPHP之import方法实例详解
2014/06/20 PHP
PHP下载生成的csv文件及问题总结
2015/08/06 PHP
php实现和c#一致的DES加密解密实例
2017/07/24 PHP
jquery tab标签页的制作
2010/05/10 Javascript
拖动table标题实现改变td的大小(css+js代码)
2013/04/16 Javascript
jQuery中parent()方法用法实例
2015/01/07 Javascript
JavaScript 学习笔记之变量及其作用域
2015/01/14 Javascript
AngularJS 使用$sce控制代码安全检查
2016/01/05 Javascript
利用JavaScript对中文(汉字)进行排序实例详解
2017/06/18 Javascript
vue 2.0 购物车小球抛物线的示例代码
2018/02/01 Javascript
VUE 3D轮播图封装实现方法
2018/07/03 Javascript
如何基于filter实现网站整体变灰功能
2020/04/17 Javascript
[01:12]DOTA2次级职业联赛 - Newbee.Y 战队宣传片
2014/12/01 DOTA
python解析xml文件实例分析
2015/05/27 Python
Python修改MP3文件的方法
2015/06/15 Python
实现python版本的按任意键继续/退出
2016/09/26 Python
python实现八大排序算法(1)
2017/09/14 Python
Python基于分水岭算法解决走迷宫游戏示例
2017/09/26 Python
对python3 一组数值的归一化处理方法详解
2018/07/11 Python
Python使用jsonpath-rw模块处理Json对象操作示例
2018/07/31 Python
linux查找当前python解释器的位置方法
2019/02/20 Python
Python实现监控Nginx配置文件的不同并发送邮件报警功能示例
2019/02/26 Python
公共汽车、火车和飞机票的通用在线预订和销售平台:INFOBUS
2019/11/30 全球购物
荷兰度假屋租赁网站:Aan Zee
2020/02/28 全球购物
Linden Leaves官网:新西兰纯净护肤品
2020/12/20 全球购物
企业内控岗位的职责
2014/02/07 职场文书
房屋买卖协议书范本
2014/04/10 职场文书
社保委托书怎么写
2014/08/02 职场文书
冲出亚马逊观后感
2015/06/03 职场文书
指导教师推荐意见
2015/06/05 职场文书
运动会广播稿300字
2015/08/19 职场文书
2016幼儿园毕业感言
2015/12/08 职场文书
先进个人事迹材料(2016推荐版)
2016/03/01 职场文书
Pycharm 如何设置HTML文件自动补全代码或标签
2021/05/21 Python