opencv-视频基本操作
写视频
# encoding: utf-8
'''
@author: gaoyongxian666
@file: opencv_video_write.py
@time: 2018/4/15 11:12
''' import cv2 # 默认是摄像头,如果是路径就是播放文件
# 他的参数可以是 设备的索引号,或者是一个视频文件。
# 设备索引号就是在指定要使用的摄像头。一般的笔记本电脑都有内置摄像头。所以参数就是 0。
# 你可以通过设置成 1 或 者其他的来选择别的摄像头。
cap = cv2.VideoCapture(0) # 这是一个获取视频的对象 # 创建视频写对象,可以将图片(或者摄像头)合成视频。
# 这是用opencv生成的fourcc codec,或者说是编码器
# Define the codec and create VideoWriter object
# FourCC 就是一个 4 字节码,用来确定视频的编码格式。可用的编码列表 可以从fourcc.org查到。
# 不同的平台依赖不同的编码格式:windows DIVX,linux DIVX, XVID, MJPG, X264, WMV1, WMV2. (XVID is more preferable. MJPG results in high size video. X264 gives very small size video
fourcc = cv2.VideoWriter_fourcc(*'DIVX') # 这次我们要创建一个 VideoWriter 的对象。
# 第一个参数:输出文件 的名字。
# 第二个参数:指定 FourCC 编码。
# 第三四个参数:播放频率和帧的大小。
# 最后一个参数: isColor 标签。如果是 True,每一帧就是彩色图,
out = cv2.VideoWriter('output.mp4',fourcc, 20.0, (640,480)) while(cap.isOpened()):
ret, frame = cap.read()
if ret==True:
# cv2里面用于翻转图像
frame = cv2.flip(frame,0)
# write the flipped frame
# 写入下一个视频帧
out.write(frame)
cv2.imshow('frame',frame) if cv2.waitKey(1) & 0xFF == ord('q'):
break
else:
break # Release everything if job is finished
cap.release()
out.release()
cv2.destroyAllWindows()
读视频:
# encoding: utf-8
'''
@author: gaoyongxian666
@file: opencv_video_read.py
@time: 2018/4/15 10:42
''' import cv2 # 声明一个 VideoCapture 对象。他的参数可以是 设备的索引号,或者是一个视频文件。
# 设备索引号就是在指定要使用的摄像头。
# 一般的笔记本电脑都有内置摄像头。所以参数就是 0。你可以通过设置成 1 或 者其他的来选择别的摄像头。
# 之后,你就可以一帧一帧的捕获视频了。
# 有时 cap 可能不能成功的初始化摄像头设备。这种情况下上面的代码会报错。你可以使用 cap.isOpened(),
# 来检查是否成功初始化了。如果返回值是 True,那就没有问题。否则就要使用函数 cap.open()。
cap = cv2.VideoCapture(0) # cap.get(propId)
# 你可以使用函数 cap.get(propId) 来获得视频的一些参数信息。这里 propId 可以是 0 到 18 之间的任何整数。每一个数代表视频的一个属性
# cap.set(propId,value)
# 其中的一些值可以使用 cap.set(propId,value) 来修改,value 就是 你想要设置成的新值。
# 例如,我可以使用 cap.get(3) 和 cap.get(4) 来查看每一帧的宽和高。 默认情况下得到的值是 640X480。
# 但是我可以使用 ret=cap.set(3,320) 和 ret=cap.set(4,240) 来把宽和高改成 320X240。 # 注意:当你的程序报错时,检查是否初始化成功
# cap.isOpened()
# cap.open():如果没有初始化成功,调用打开方法
while (cap.isOpened()):
# while (True): # Capture(捕获) frame-by-frame
# cap.read() # 返回两个值,一个布尔值(True/False)一个ndarray值。
# 如果帧读取的是正确的,就是 True。
# 所以最后你可以通过检查他的返回值来查看视频文件是否已经到了结尾。 # ndarray是抓取、解码并返回下一个视频帧
# <class 'numpy.ndarray'>,抓取不到返回为None
ret,frame = cap.read()
print(ret)
print(frame)
print(type(frame)) # 在这里进行对每一帧的操作
# Our operations on the frame come here
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# Display the resulting frame
print(gray.shape) # 加上字
font = cv2.FONT_HERSHEY_SIMPLEX
img=cv2.putText(gray, 'OpenCV', (10, 180), font, 5, (255, 255, 255), 20)
cv2.imshow('frame',img)
cv2.waitKey(25)
if cv2.waitKey(1) & 0xFF == ord('q'):
break # When everything done, release the capture
cap.release()
cv2.destroyAllWindows()

opencv-视频基本操作的更多相关文章
- OpenCV视频读取播放,视频转换为图片
转载请注明出处!!! http://blog.csdn.net/zhonghuan1992 OpenCV视频读取播放,视频转换为图片 介绍几个有关视频读取的函数: VideoCapture::Vide ...
- opencv 视频处理相关
包含视频格式知识(编解码和封装格式):如何获取视频信息及视频编解码格式:opencv读取及保存视频,及opencv fourcc编码格式 一.基础知识 视频的编解码格式和封装格式 参考如山似水 视频编 ...
- 庞锋 OpenCV 视频 学习进度备忘
书签:另外跳过的内容有待跟进 学习资源: opencv视频教程目录(初级) 主讲:庞锋,毕业于电子科技大学 知识基础支持: 线性代数 应用数学 跳过的内容: 1.第1~6集跳过,简单.(2014- ...
- ffmpeg的安装--opencv视频处理必备
安装yasm(ffmpeg必备)wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gztar xzvf yasm-1. ...
- OpenCV——视频操作基础
读入视频: VideoCapture 类 //方法一 VideoCapture capture; capture.open("test.avi"); //方法二 VideoCapt ...
- OpenCV 视频处理框架
OpenCV 本身集成了 FFmpeg,因此对于视频是有解码和编码功能的.尽管其效率在本人看来还不能跟未被封装的FFmpeg相提并论,然用其来对视频进行解码得到图像,然后对图像进行处理并将得到的图像又 ...
- OpenCV 视频与图片序列相互转换
我们在计算机视觉相关的实验中都需要视频与图片序列之间相互转换,在平时的实验中,经常需要将视频保存为一帧一帧的图片,以获取实验结果:另一方面,很多标准的算法测试数据库都是图片序列(文件名以帧号+图片扩展 ...
- OpenCV 视频监控(Video Surveilance)的算法体系
如前面说到的,OpenCV VS提供了6组算法的接口,分别是:前景检测.新目标检测.目标跟踪.轨迹生成.跟踪后处理.轨迹分析,除了轨迹生成用于轨迹数据的保存以外,其他5个部分都是标准的视频监控算法体系 ...
- 1.6 opencv视频操作基础
利用opencv中的VideoCapture类,来对视频进行读取显示,以及调用摄像头. VideoCapture是opencv 2.X中新增的一个类,对应于之前C语言版本的CvCapture结构体.它 ...
- OpenCV视频的读写
实验室的项目是处理视频,所以就从视频的读取和写入开始吧! 常用的接口有C++和Python,Python肯定要简洁许多,不过因为项目需要,还是用C++了(PS:其实是我被Python的速度惊到了... ...
随机推荐
- PowerDesigner的Additional Checkes 中使用统配符
在Domian或字段的的约束条件中,会用的正则表达式等约束.但正则表达式 regexp_like(ICAO,'^([A-Z]{4}$')中要出现明确字段名如ICAO,每个使用同样约束的字段都要修改此字 ...
- UML在需求分析阶段的应用
转自:https://www.cnblogs.com/fuhaots2009/p/3430666.html 上一篇博客写了uml在软件开发过程中的应用,这以篇要详细介绍一下UML在需求分析过程中的应用 ...
- python之Dict和set类型
Dict就是一种key:value的表格: >>> d = { 'Adam':95, 'Lisa':85, 'Bart':59, 'Paul':75 } >>> p ...
- nginx配置域名
其他都一样,就特别说下server块的配置. server { listen 80; server_name www.icweshop.com; # 注意:这里你填写的域名必须在/etc/hosts中 ...
- 第二部分 实习操作课程 第一节 ArcGIS Online的基本功能
- 【总结整理】关于ArcGIS中拓扑的理解
空间拓扑: https://www.baidu.com/link?url=f8fd1d75GhwtT1JuyPDZydZlWCgEXB9DeuTzDqGQIIRpq0bM-8t3MlC5tXYvEwQ ...
- vue安装vuex框架
1.安装vuex npm install vuex --save-dev 2.创建storesrc下创建stores文件夹,创建noteStore.js import Vue from 'vue'; ...
- (转)C++中使用C代码
昨晚看书的时候碰到一个问题,在C++中如何调用C代码...于是查了一下资料...发现了一个大神写的文章挺好的. -------------------------------------------- ...
- 前端学习笔记2017.6.12 DIV布局网页
DIV的功能就是把网页划分成逻辑块的. 看下豆瓣东西页面的布局,我们来分析下. 按照先从上到下的原则,把这个页面分成几个块: 首先是最顶端的这个条,这是一个DIV,我们给它起个名字,叫banner 然 ...
- android json解析(JSONObject方法实现)
今天刚刚学到json解析,看了一整天,大概了解到json就是你通过一个API(我用的聚合数据的API)发送一个请求,接着会收到json数据,比如说天气预报吧,他会给你发送一大段字符串,大概是未来几天的 ...