写视频

# 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-视频基本操作的更多相关文章

  1. OpenCV视频读取播放,视频转换为图片

    转载请注明出处!!! http://blog.csdn.net/zhonghuan1992 OpenCV视频读取播放,视频转换为图片 介绍几个有关视频读取的函数: VideoCapture::Vide ...

  2. opencv 视频处理相关

    包含视频格式知识(编解码和封装格式):如何获取视频信息及视频编解码格式:opencv读取及保存视频,及opencv fourcc编码格式 一.基础知识 视频的编解码格式和封装格式 参考如山似水 视频编 ...

  3. 庞锋 OpenCV 视频 学习进度备忘

    书签:另外跳过的内容有待跟进 学习资源: opencv视频教程目录(初级)   主讲:庞锋,毕业于电子科技大学 知识基础支持: 线性代数 应用数学 跳过的内容: 1.第1~6集跳过,简单.(2014- ...

  4. ffmpeg的安装--opencv视频处理必备

    安装yasm(ffmpeg必备)wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gztar xzvf yasm-1. ...

  5. OpenCV——视频操作基础

    读入视频: VideoCapture 类 //方法一 VideoCapture capture; capture.open("test.avi"); //方法二 VideoCapt ...

  6. OpenCV 视频处理框架

    OpenCV 本身集成了 FFmpeg,因此对于视频是有解码和编码功能的.尽管其效率在本人看来还不能跟未被封装的FFmpeg相提并论,然用其来对视频进行解码得到图像,然后对图像进行处理并将得到的图像又 ...

  7. OpenCV 视频与图片序列相互转换

    我们在计算机视觉相关的实验中都需要视频与图片序列之间相互转换,在平时的实验中,经常需要将视频保存为一帧一帧的图片,以获取实验结果:另一方面,很多标准的算法测试数据库都是图片序列(文件名以帧号+图片扩展 ...

  8. OpenCV 视频监控(Video Surveilance)的算法体系

    如前面说到的,OpenCV VS提供了6组算法的接口,分别是:前景检测.新目标检测.目标跟踪.轨迹生成.跟踪后处理.轨迹分析,除了轨迹生成用于轨迹数据的保存以外,其他5个部分都是标准的视频监控算法体系 ...

  9. 1.6 opencv视频操作基础

    利用opencv中的VideoCapture类,来对视频进行读取显示,以及调用摄像头. VideoCapture是opencv 2.X中新增的一个类,对应于之前C语言版本的CvCapture结构体.它 ...

  10. OpenCV视频的读写

    实验室的项目是处理视频,所以就从视频的读取和写入开始吧! 常用的接口有C++和Python,Python肯定要简洁许多,不过因为项目需要,还是用C++了(PS:其实是我被Python的速度惊到了... ...

随机推荐

  1. springJunit测试

    ; m.setModelType(s); m.setModelUrlType(s); modelService.create(m); } }   来源: http://enki-ding-yeah-n ...

  2. 理解和正确使用Java中的断言(assert)

    一.语法形式:    Java2在1.4中新增了一个关键字:assert.在程序开发过程中使用它创建一个断言(assertion),它的语法形式有如下所示的两种形式:1.assert conditio ...

  3. 【273】利用ArcPy建立处理数据的脚本

    这个脚本可以直接运行处理程序,首先在 ArcPy 上面测试,成功后写入文件,下面的代码实现将指定文件夹内部的栅格数据进行 Calculate Statistics 操作,否则在进行专题图制作的时候会出 ...

  4. 记录一次手机联系人整理(XML文件格式处理)

    场景:1.IOS手机和Android手机联系人同步时有部分重复联系人. 2.很早以前的HTC手机导出的联系人中备注信息有大量乱码,且很多联系人生日被设置为1970-01-01,导致生日提醒软件产生骚扰 ...

  5. adb device offline 解决办法

    当电脑中的豌豆荚之类的应用打开的状态下 adb devices 显示连接状态 关闭手机助手之后,adb devices总显示 device offline 后来发现sdk  platform-tool ...

  6. Lucene源码解析--Analyzer之Tokenizer

    Analyzer包含两个核心组件,Tokenizer以及TokenFilter.两者的区别在于,前者在字符级别处理流,而后者则在词语级别处理流.Tokenizer是Analyzer的第一步,其构造函数 ...

  7. 【总结整理】天地图WMTS服务与卫星图匹配与坐标转换

    http://blog.sina.com.cn/s/blog_60abbd570102wnhh.html

  8. Ros学习——C++发布器publisher和订阅器subscriber

    1.编写发布器 初始化 ROS 系统 在 ROS 网络内广播我们将要在 chatter 话题上发布 std_msgs/String 类型的消息 以每秒 10 次的频率在 chatter 上发布消息 在 ...

  9. 数组中的最大值以及最小值的位置变换的问题(C++)

    将一个5×5的数组中的最大值放到数组的中心位置 分析:遍历数组,找到最大的元素,然后将该元素与中心位置的元素交换位置 #include<iostream> #include <std ...

  10. 一个ButtonDemo序(遇到的问题,以及在大牛的帮助下,如何解决的。)

    问题1: public ButtonDemo(){ //ImageIcon leftButtonIcon=new ImageIcon("images/a.png"); ImageI ...