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怎么学好python?
Oct 07 Python
十个Python程序员易犯的错误
Dec 15 Python
python实现爬虫统计学校BBS男女比例之数据处理(三)
Dec 31 Python
python 异常处理总结
Oct 18 Python
Python实现求解括号匹配问题的方法
Apr 17 Python
python获取点击的坐标画图形的方法
Jul 09 Python
Flask框架实现的前端RSA加密与后端Python解密功能详解
Aug 13 Python
python suds访问webservice服务实现
Jun 26 Python
2021年的Python 时间轴和即将推出的功能详解
Jul 27 Python
Python接口自动化测试的实现
Aug 28 Python
python3实现飞机大战
Nov 29 Python
pycharm中leetcode插件使用图文详解
Dec 07 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
世界上第一台立体声收音机
2021/03/01 无线电
据说是雅虎的一份PHP面试题附答案
2009/01/07 PHP
PHP 网页过期时间的控制代码
2009/06/29 PHP
ThinkPHP Mobile使用方法简明教程
2014/06/18 PHP
在WordPress中安装使用视频播放器插件Hana Flv Player
2016/01/04 PHP
如何离线执行php任务
2017/02/21 PHP
Redis在Laravel项目中的应用实例详解
2017/08/11 PHP
laravel 判断查询数据库返回值的例子
2019/10/11 PHP
JavaScript监测ActiveX控件是否已经安装过的代码
2008/09/02 Javascript
jquery select下拉框操作的一些说明
2010/04/02 Javascript
jQuery 1.7.2中getAll方法的疑惑分析
2012/05/23 Javascript
js给onclick事件赋值,动态传参数实例解说
2013/03/28 Javascript
nodejs搭建本地服务器轻松解决跨域问题
2018/03/21 NodeJs
JavaScript模拟实现自由落体效果
2018/08/28 Javascript
JavaScript之实现一个简单的Vue示例
2019/01/17 Javascript
jquery 遍历hash操作示例【基于ajax交互】
2019/10/12 jQuery
js中火星坐标、百度坐标、WGS84坐标转换实现方法示例
2020/03/02 Javascript
NodeJS多种创建WebSocket监听的方式(三种)
2020/06/04 NodeJs
vue监听浏览器原生返回按钮,进行路由转跳操作
2020/09/09 Javascript
[03:01]DOTA2英雄基础教程 露娜
2014/01/07 DOTA
利用Python获取赶集网招聘信息前篇
2016/04/18 Python
python实现人脸识别代码
2017/11/08 Python
Python编程中flask的简介与简单使用
2018/12/28 Python
python SVD压缩图像的实现代码
2019/11/05 Python
Windows10+anacond+GPU+pytorch安装详细过程
2020/03/24 Python
win10安装python3.6的常见问题
2020/07/01 Python
Farnell德国:电子元器件供应商
2018/07/10 全球购物
英国DIY和家居装饰领域的主要品牌:Wickes
2019/11/26 全球购物
捷克家具销售网站:SCONTO Nábytek
2020/01/02 全球购物
华为C++笔试题
2014/08/05 面试题
请解释一下webService? 如何用.net实现webService
2014/06/09 面试题
外贸业务员的岗位职责
2013/11/23 职场文书
班级入场式解说词
2014/02/01 职场文书
2015年行政工作总结范文
2015/04/09 职场文书
2015年卫生监督工作总结
2015/05/21 职场文书
《丑小鸭》教学反思
2016/02/19 职场文书