视频的处理和图片的处理类似,只不过视频处理需要连续处理一系列图片。

一般有两种视频源,一种是直接从硬盘加载视频,另一种是获取摄像头视频。

0x00. 本地读取视频

核心函数:

cv.CaptureFromFile()

代码示例:

  1. import cv2.cv as cv
  2. capture = cv.CaptureFromFile('myvideo.avi')
  3. nbFrames = int(cv.GetCaptureProperty(capture, cv.CV_CAP_PROP_FRAME_COUNT))
  4. #CV_CAP_PROP_FRAME_WIDTH Width of the frames in the video stream
  5. #CV_CAP_PROP_FRAME_HEIGHT Height of the frames in the video stream
  6. fps = cv.GetCaptureProperty(capture, cv.CV_CAP_PROP_FPS)
  7. wait = int(1/fps * 1000/1)
  8. duration = (nbFrames * fps) / 1000
  9. print 'Num. Frames = ', nbFrames
  10. print 'Frame Rate = ', fps, 'fps'
  11. print 'Duration = ', duration, 'sec'
  12. for f in xrange( nbFrames ):
  13. frameImg = cv.QueryFrame(capture)
  14. print cv.GetCaptureProperty(capture, cv.CV_CAP_PROP_POS_FRAMES)
  15. cv.ShowImage("The Video", frameImg)
  16. cv.WaitKey(wait)

cv2

  1. import numpy as np
  2. import cv2
  3. cap = cv2.VideoCapture('vtest.avi')
  4. while(cap.isOpened()):
  5. ret, frame = cap.read()
  6. gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
  7. cv2.imshow('frame',gray)
  8. if cv2.waitKey(1) & 0xFF == ord('q'):
  9. break
  10. cap.release()
  11. cv2.destroyAllWindows()

0x01. 摄像头视频读取

核心函数:

cv.CaptureFromCAM()

示例代码:

  1. import cv2.cv as cv
  2. capture = cv.CaptureFromCAM(0)
  3. while True:
  4. frame = cv.QueryFrame(capture)
  5. cv.ShowImage("Webcam", frame)
  6. c = cv.WaitKey(1)
  7. if c == 27: #Esc on Windows
  8. break

cv2

  1. import numpy as np
  2. import cv2
  3. cap = cv2.VideoCapture(0)
  4. while(True):
  5. # Capture frame-by-frame
  6. ret, frame = cap.read()
  7. # Our operations on the frame come here
  8. gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
  9. # Display the resulting frame
  10. cv2.imshow('frame',gray)
  11. if cv2.waitKey(1) & 0xFF == ord('q'):
  12. break
  13. # When everything done, release the capture
  14. cap.release()
  15. cv2.destroyAllWindows()

0x02. 写入视频

摄像头录制视频

  1. import cv2.cv as cv
  2. capture=cv.CaptureFromCAM(0)
  3. temp=cv.QueryFrame(capture)
  4. writer=cv.CreateVideoWriter("output.avi", cv.CV_FOURCC("D", "I", "B", " "), 5, cv.GetSize(temp), 1)
  5. #On linux I used to take "M","J","P","G" as fourcc
  6. count=0
  7. while count<50:
  8. print count
  9. image=cv.QueryFrame(capture)
  10. cv.WriteFrame(writer, image)
  11. cv.ShowImage('Image_Window',image)
  12. cv.WaitKey(1)
  13. count+=1

从文件中读取视频并保存

  1. import cv2.cv as cv
  2. capture = cv.CaptureFromFile('img/mic.avi')
  3. nbFrames = int(cv.GetCaptureProperty(capture, cv.CV_CAP_PROP_FRAME_COUNT))
  4. width = int(cv.GetCaptureProperty(capture, cv.CV_CAP_PROP_FRAME_WIDTH))
  5. height = int(cv.GetCaptureProperty(capture, cv.CV_CAP_PROP_FRAME_HEIGHT))
  6. fps = cv.GetCaptureProperty(capture, cv.CV_CAP_PROP_FPS)
  7. codec = cv.GetCaptureProperty(capture, cv.CV_CAP_PROP_FOURCC)
  8. wait = int(1/fps * 1000/1) #Compute the time to wait between each frame query
  9. duration = (nbFrames * fps) / 1000 #Compute duration
  10. print 'Num. Frames = ', nbFrames
  11. print 'Frame Rate = ', fps, 'fps'
  12. writer=cv.CreateVideoWriter("img/new.avi", int(codec), int(fps), (width,height), 1) #Create writer with same parameters
  13. cv.SetCaptureProperty(capture, cv.CV_CAP_PROP_POS_FRAMES,80) #Set the number of frames
  14. for f in xrange( nbFrames - 80 ): #Just recorded the 80 first frames of the video
  15. frame = cv.QueryFrame(capture)
  16. print cv.GetCaptureProperty(capture, cv.CV_CAP_PROP_POS_FRAMES)
  17. cv.WriteFrame(writer, frame)
  18. cv.WaitKey(wait)

cv2

  1. import numpy as np
  2. import cv2
  3. cap = cv2.VideoCapture(0)
  4. # Define the codec and create VideoWriter object
  5. fourcc = cv2.VideoWriter_fourcc(*'XVID')
  6. out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640,480))
  7. while(cap.isOpened()):
  8. ret, frame = cap.read()
  9. if ret==True:
  10. frame = cv2.flip(frame,0)
  11. # write the flipped frame
  12. out.write(frame)
  13. cv2.imshow('frame',frame)
  14. if cv2.waitKey(1) & 0xFF == ord('q'):
  15. break
  16. else:
  17. break
  18. # Release everything if job is finished
  19. cap.release()
  20. out.release()
  21. cv2.destroyAllWindows()

python 处理视频输入输出的更多相关文章

  1. 零基础快速掌握Python系统管理视频课程【猎豹网校】

    点击了解更多Python课程>>> 零基础快速掌握Python系统管理视频课程[猎豹网校] 课程目录 01.第01章 Python简介.mp4 02.第02章 IPython基础.m ...

  2. Python远程视频监控

    Python远程视频监控程序   老板由于事务繁忙无法经常亲临教研室,于是让我搞个监控系统,让他在办公室就能看到教研室来了多少人.o(>﹏<)o||| 最初我的想法是直接去网上下个软件,可 ...

  3. Python基础-输入输出(IO)

    Python基础-输入输出(IO) 程序会有输入和输出,输入可以从标准输入或是从一个文件读入数据,程序的输出可以以一种友好可读的方式(human-readable)打印出来,或是写进一个文件,而标准输 ...

  4. python入门8 输入输出

    输入 input() 输出 print() #coding:utf-8 #/usr/bin/python """ 2018-11-03 dinghanhua 输入输出 & ...

  5. [原创]使用python对视频/音频文件进行详细信息采集,并进行去重操作

    [原创]使用python对视频/音频文件进行详细信息采集,并进行去重操作 转载请注明出处 一.关于为什么用pymediainfo以及pymediainfo的安装 使用python对视频/音频文件进行详 ...

  6. python全套视频十五期(116G)

    python全套视频,第十五期,从入门到精通,基础班,就业班,面试,软件包 所属网站分类: 资源下载 > python视频教程 作者:精灵 链接:http://www.pythonheidong ...

  7. Python学习教程(Python学习视频_Python学些路线):Day06 函数和模块的使用

    Python学习教程(Python学习视频_Python学些路线):函数和模块的使用 在讲解本章节的内容之前,我们先来研究一道数学题,请说出下面的方程有多少组正整数解. $$x_1 + x_2 + x ...

  8. [Python] 将视频转成ASCII符号形式、生成GIF图片

    一.简要说明 简述:本文主要展示将视频转成ASCII符号形式展示出来,带音频. 运行环境:Win10/Python3.5. 主要模块: PIL.numpy.shutil. [PIL]: 图像处理 [n ...

  9. 《Python爬虫技术:深入理解原理、技术与开发》已经出版,送Python基础视频课程

    好消息,<Python爬虫技术:深入理解原理.技术与开发>已经出版!!!   JetBrains官方推荐图书!JetBrains官大中华区市场部经理赵磊作序!送Python基础视频课程!J ...

随机推荐

  1. 项目开发(Require + E.js)

    最近在做的几个项目,分别用了不同的框架跟方式,有个H5的项目,用了vue框架, 这个项目我还没有正式加入进去, 等手头的这个项目完成就可以去搞vue了, 现在手头的这个项目是一个招聘的项目, 用到了N ...

  2. iOS优秀博客收录

    原文链接:http://ju.outofmemory.cn/entry/105297 唐巧 王巍 破船之家 NSHipster Limboy 无网不剩 念茜的博客 Xcode Dev Ted's Ho ...

  3. CSS属性小结之--半透明处理

    项目中经常有遇到需求半透明的情况,如图片.文字.容器.背景等等,每次都要去翻以前的项目,不甚其烦.现在一次性做个小结,方便自己查阅,也同时分享给大家: 一. 元素容器透明 .div{ opacity: ...

  4. Windows10下的JDK环境配置。

    首先附上JDK资源: 下载地址:Java SE Development Kit 8u112 PS:32位系统下载X86,64位系统下载X64 JDK安装: 此处省略安装步骤..... PS:记住JDK ...

  5. Java中的堆栈区别

    在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配. 当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配 ...

  6. getAttribute、setAttribute、removeAttribute

    1.函数语法 elementNode.attributes:属性返回包含被选节点属性的 NamedNodeMap. elementNode.getAttribute(name):方法通过名称获取属性的 ...

  7. Shell 获取指定行的内容

    需求: 有一个文件,根据指定的字符串,得到该字符串上两行的内容. 文件内容如下: linux-56:# cat sys.ttconnect.ini # Copyright (C) 1999, 2006 ...

  8. acm 1002 算法设计

    最近突然想往算法方向走走,做了做航电acm的几道题 二话不说,开始 航电acm 1002 题主要是处理长数据的问题,算法原理比较简单,就是用字符数组代替int,因为int太短需要处理的数据较长 下面是 ...

  9. JavaScript中的面向对象

    //简单的面向对象 function 构造函数(){ this.属性; } //写在构造函数里面的属性一般为公共属性,或者通过传值进行改变. 构造函数.原型.方法 = function(){}; // ...

  10. linux 下查看cpu位数 内核等参数命令(转)

    # uname -a Linux euis1 2.6.9-55.ELsmp #1 SMP Fri Apr 20 17:03:35 EDT 2007 i686 i686 i386 GNU/Linux ( ...