一、什么是视频?

1、视频的基本概念:
视频(Video)泛指将一系列静态影像以电信号的方式加以捕捉、纪录、处理、储存、传送与重现的各种技术。连续的图像变化每秒超过24帧(frame)画面以上时,根据视觉暂留原理,人眼无法辨别单幅的静态画面;看上去是平滑连续的视觉效果,这样连续的画面叫做视频。
简单来说视频就是很多张照片连续切换。
2、视频的基本属性:

  • 画面更新率(FPS):
    Frame rate中文常译为“画面更新率”或“帧率”,是指视频格式每秒钟播放的静态画面数量。
  • 分辨率
    • 各种电视规格分辨率比较视频的画面大小称为“分辨率”。数位视频以像素为度量单位,而类比视频以水平扫描线数量为度量单位。
    • 新的高清电视(HDTV)分辨率可达1920×1080p60,即每条水平扫描线有1920个像素,每个画面有1080条扫描线,以每秒钟60张画面的速度播放。
    • 3D视频的分辨率以voxel(volume picture element,中文译为“体素”)来表示。例如一个512×512×512体素的分辨率用于简单的3D视频,可以被包括部分PDA在内的电脑设备播放。
  • 长宽比(Aspectratio):
    是用来描述视频画面与画面元素的比例。

    • 传统的电视屏幕长宽比为4:3(1.33:1)。
      HDTV的长宽比为16:9(1.78:1)。而35mm胶卷底片的长宽比约为1.37:1。
    • 虽然电脑荧幕上的像素大多为正方形,但是数字视频的像素通常并非如此。例如使用于PAL及NTSC讯号的数位保存格式CCIR 601,以及其相对应的非等方宽萤幕格式。因此以720x480像素记录的NTSC规格DV影像可能因为是比较“瘦”的像素格式而在放映时成为长宽比4:3的画面,或反之由于像素格式较“胖”而变成16:9的画面。
  • 压缩技术:
    视频压缩技术(仅适用数位讯号)
    自从数位信号系统被广泛使用以来,人们发展出许多方法来压缩视频串流。由于视频资料包含了空间的与时间的冗余性,所以使得未压缩的视频串流以传送效率的观点来说是相当糟糕的。
    总体而言,空间冗余性可以借由“只记录单帧画面的一部分与另一部分的差异性”来减低;这种技巧被称为帧内压缩(intraframe compression)。并且与图像压缩密切相关,而时间冗余性则可借由“只记录两帧不同画面间的差异性”来减低;这种技巧被称为帧间压缩(interframe compression),包括运动补偿以及其他技术。目前最常用的视频压缩技术为DVD与卫星直播电视所采用的MPEG-2,以及因特网传输常用的MPEG-4。
  • 视频编码 :
    所谓视频编码方式就是指通过压缩技术,将原始视频格式的文件转换成另一种视频格式文件的方式。视频流传输中最为重要的编解码标准有国际电联的H.261、H.263、H.264,运动静止图像专家组的M-JPEG和国际标准化组织运动图像专家组的MPEG系列标准,此外在互联网上被广泛应用的还有Real-Networks的RealVideo、微软公司的WMV以及Apple公司的QuickTime等。
  • 视频格式:
    视频格式实质是视频编码方式,可以分为适合本地播放的本地影像视频和适合在网络中播放的网络流媒体影像视频两大类。尽管后者在播放的稳定性和播放画面质量上可能没有前者优秀,但网络流媒体影像视频的广泛传播性使之正被广泛应用于视频点播、网络演示、远程教育、网络视频广告等互联网信息服务领域。
    视频格式主要有rm,rmv,mpeg1-4 mov mtv dat wmv avi 3gp amv dmv flv mp4,这类格式可是影像阵营中的一个大家族,也是我们平时所见到的最普遍的一种视频格式。

二、OpenCV的视频操作:
1、对于视频的读取,OpenCV提供了接口VideoCapture。要想编程实现视频的读取与显示,需要熟悉一下该类的构造函数和成员函数。
Video = cv2.VideoCapture(index)

index 作用
0 表示摄像头编号,0一般是本机摄像头
"路径+文件名“ 打开视频文件
“网络地址“ 打开网络摄像头

Video.isOpened()
判断对象是否创建成功

  • 返回布尔值(true or false)

isOpened , Image = Video.read()
读取一帧视频
返回:

  • isOpened 是否读取成功
  • Image 图像

Video.get(param)

import cv2
Video = cv2.VideoCapture(0) #初始化本机摄像头
while(Video.isOpened()): #成功则开始读取isO , VImg = Video.read() #读取视频帧if isO : #成功则显示cv2.imshow("Video",VImg)if cv2.waitKey(10) == ord("q"): #每帧延时10ms并判断是否按下q键break
Video.release() #关闭摄像头
cv2.destroyAllWindows()

2、视频的保存:
OpenCV提供了接口VideoWriter,要想编程实现保存视频,需要熟悉一下该类的构造函数和成员函数。

writer = cv2.VideoWriter( filename, fourcc, fps, frameSize,size ,isColor)

  • filename : 保存的文件名
  • fourcc: 编解码器4字代码
    cv2.VideoWriter_fourcc
    设置视频格式:
fourcc 描述
cv2.VideoWriter_fourcc(‘I’,‘4’,‘2’,‘0’) 4:2:0色度子采样。兼容性好,但文件较大。文件扩展名.avi。
cv2.VideoWriter_fourcc(‘P’,‘I’,‘M’,‘1’) MPEG-1编码类型,文件扩展名.avi。随机访问,灵活的帧率、可变的图像尺寸、定义了I-帧、P-帧和B-帧 、运动补偿可跨越多个帧 、半像素精度的运动向量 、量化矩阵、GOF结构 、slice结构 、技术细节、输入视频格式。
cv2.VideoWriter_fourcc(‘X’,‘V’,‘I’,‘D’) –MPEG-4编码类型,视频大小为平均值,MPEG4所需要的空间是MPEG1或M-JPEG的1/10,它对运动物体可以保证有良好的清晰度,间/时间/画质具有可调性。文件扩展名.avi。
cv2.VideoWriter_fourcc(‘T’,‘H’,‘E’,‘O’) —OGGVorbis,音频压缩格式,有损压缩,类似于MP3等的音乐格式。,兼容性差,件扩展名.ogv。
cv2.VideoWriter_fourcc(‘F’,‘L’,‘V’,‘1’) FLV是FLASH VIDEO的简称,FLV流媒体格式是一种新的视频格式。由于它形成的文件极小、加载速度极快,使得网络观看视频文件成为可能,它的出现有效地解决了视频文件导入Flash后,使导出的SWF文件体积庞大,不能在网络上很好的使用等缺点。文件扩展名为.flv。
  • frameSize: 视频帧大小
  • size:视频的宽和高
  • isColor: 布尔值 (true or false ) 视频是否为彩色

writer.writer(image)
保存图片到视频文件对象

import cv2
Video = cv2.VideoCapture(0) #初始化本机摄像头
fps = Video.get(5)  #获取原视频帧率
size = (int(Video.get(3)),int(Video.get(4)))
writer=cv2.VideoWriter("output.avi",cv2.VideoWriter_fourcc(*'XVID'),fps,size)#'MJPG'对windows没有用
while(Video.isOpened()): #成功则开始读取isO , VImg = Video.read() #读取视频帧if isO : #成功则显示cv2.imshow("Video",VImg)writer.write(VImg)  #逐帧保存if cv2.waitKey(1) == ord("q" ):break
Video.release() #关闭摄像头
cv2.destroyAllWindows()

练习题10:

利用摄像头或者喜欢的视频,进行轮廓绘制,并绘制在原视频上进行不间断播放。
评论出你的答案

永兴的笔记-OpenCV-14视频基本操作 1相关推荐

  1. python图像处理opencv笔记(二):视频基本操作

    视频基本操作 视频读取 opencv中通过VideoCaptrue类对视频进行读取操作以及调用摄像头,下面是该类的API: import cv2video = cv2.VideoCapture(0) ...

  2. 解决Python OpenCV 读取视频并抽帧出现error while decoding的问题

    解决Python OpenCV 读取视频抽帧出现error while decoding的问题 1. 问题 2. 解决 3. 源代码 参考 1. 问题 读取H264视频,抽帧视频并保存,报错如下: [ ...

  3. Atitit Java OpenCV 捕获视频

    Atitit Java  OpenCV 捕获视频 ,打开一段视频或默认的摄像头 有两种方法,一种是在定义类的时候,一种是用open()方法. 一. 读取视频序列 OpenCV提供了一个简便易用的框架以 ...

  4. OpenCV捕获视频和摄像头

    从文件中捕获视频 其实使用OpenCV读取视频相当简单,只需要初始化一个VideoCapture对象,打开视频文件,逐帧读取. 程序 下面是简单的OpenCV代码: 1 2 3 4 5 6 7 8 9 ...

  5. OpenCV之highgui 模块. 高层GUI和媒体I/O: 为程序界面添加滑动条 OpenCV的视频输入和相似度测量 用OpenCV创建视频

    为程序界面添加滑动条 在以前的教程中 (例如 linear blending 和 brightness and contrast adjustments)你有可能注意到需要 input 一些数值到我们 ...

  6. 深度学习笔记(14) 评估指标

    深度学习笔记(14) 评估指标 1. 正交化 2. 单一数字评估指标 3. 满足和优化指标 4. 改变开发/测试集和指标 1. 正交化 搭建建立机器学习系统的挑战之一是,可以尝试和改变的东西太多太多了 ...

  7. Caffe学习笔记2--Ubuntu 14.04 64bit 安装Caffe(GPU版本)

    0.检查配置 1. VMWare上运行的Ubuntu,并不能支持真实的GPU(除了特定版本的VMWare和特定的GPU,要求条件严格,所以我在VMWare上搭建好了Caffe环境后,又重新在Windo ...

  8. 用Python Opencv实现视频快进

    怎么用Opencv实现视频快进?小白可能会增大ftp,减小等待时间,但是这种方式大大增加了程序计算量,而且快进有上限,一般电脑全力计算也只不过能快进两三倍而已.要想实现大步幅快进就要用到跳帧:比如读取 ...

  9. opencv录制视频 python_Python-OpenCV录制H264编码的MP4视频

    前言 因最近项目需求涉及计算机视觉相关内容,需要实现在Python录制视频,并且录制完成后可在浏览器前端中进行视频回放的功能:特写下此篇文章以记录整体实现过程. 2019-08-02 更新 之前一直在 ...

最新文章

  1. JS如何判断json是否为空
  2. python遍历文件目录_python目录遍历
  3. scala_until
  4. BM算法的shift1表是在所有情况下移动都是最快的吗?
  5. pythonurllib微博登录怎么删_Python骚操作之删微博还需用手动吗?Python去做就好了!...
  6. arraylist可以存储不同类型吗_结构胶的种类多吗?不同的类型有哪些产品特性?...
  7. switch变量的作用 域问题
  8. Java-ArrayList和Vector的区别
  9. android camera捕捉,通过android camera2 API捕捉4:3相机图片与16:9传感器阵列相机
  10. 交?叉?验?证?(?分?类?器?性?能?)
  11. python编程输入三个数按大小输出_编程:输入3个数,按从小到大的顺序输出
  12. Android游戏开发的开源框架
  13. Nodejs操作Access数据库
  14. opencv使用tensorflow ssd迁移学习 pb文件转pbtxt文件出错
  15. 题解 P1621 【集合】
  16. ALVA Systems发布AR新品 倪光南院士致辞
  17. H264解码器源码(Android 1.6 版)
  18. 10 个 Flutter 优秀组件
  19. json 微信小程序 筛选_微信小程序(同城小程序)_总结二(筛选功能)
  20. ios浏览器无法播放视频-node.js文件传输问题

热门文章

  1. Python中的__init__()方法整理中(两种解释)
  2. 导数的应用如何运用计算机教学,如何运用多媒体数学教学
  3. UPX对Android上ELF加壳使用过程中的若干问题总结
  4. 央企校招计算机专业吗,为什么央企国企现在几乎都是校招,基本不要社招了?...
  5. 区块链从业者的狗年求职指南
  6. 中职初始计算机键盘公开课教案,[机械键盘]以“键盘”为话题的公开课教案
  7. TAP_restart
  8. visdom安装与基本用法
  9. 视听融合综述(一)Audiovisual Fusion: Challenges and New Approaches
  10. HTML5 Geolocation API