如何用OpenCV处理视频

  • 读取视频文件,显示视频,保存视频文件
  • 从摄像头获取并显示视频

1.用摄像头捕获视频

  为了获取视频,需要创建一个VideoCapature对象。其参数可以是设备的索引号,也可以是一个视频文件。设备索引号一般笔记本自带的摄像头是0。之后就可以一帧一帧的捕获视频,但是一定要记得停止捕获视频

  # -*- coding:utf-8 -*-

import numpy as np
import cv2

cap = cv2.VideoCapture(0)#cap仅仅是摄像头的一个对象
while True:
ret,frame = cap.read()#一帧一帧的捕获视频,ret返回的是否读取成功,frame返回的是帧

# gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)#对帧的操作,这里是把彩色图像转为灰度图像
# cv2.imshow('frame',gray)

cv2.imshow('frame',frame)
if cv2.waitKey(1) == ord('q'):#key值写的太高,会导致视频帧数很低
break

print(ret)
cap.release()
cv2.destroyAllWindows()

cap.read()返回一个布尔值,如果帧的读取是正确的,就会返回True。可以通过检查他的返回值来查看视频文件是否已经到了结尾

有时候cap无法成功的初始化摄像头,此时需要用cap.isOpened()来检查是否初始化成功。返回值为True表示没有问题

可以用cap.get(propId)来获取视频的一些参数信息。propIdし0-18的整数,具体代表视频属性如下

• CV_CAP_PROP_POS_MSEC Current position of the video file in milliseconds.
• CV_CAP_PROP_POS_FRAMES 0-based index of the frame to be decoded/captured next.
• CV_CAP_PROP_POS_AVI_RATIO Relative position of the video file: 0 - start of the film, 1 - end of the film.
• CV_CAP_PROP_FRAME_WIDTH Width of the frames in the video stream.
• CV_CAP_PROP_FRAME_HEIGHT Height of the frames in the video stream.
• CV_CAP_PROP_FPS Frame rate.
• CV_CAP_PROP_FOURCC 4-character code of codec.
• CV_CAP_PROP_FRAME_COUNT Number of frames in the video file.
• CV_CAP_PROP_FORMAT Format of the Mat objects returned by retrieve() .
• CV_CAP_PROP_MODE Backend-specific value indicating the current capture mode.
• CV_CAP_PROP_BRIGHTNESS Brightness of the image (only for cameras).
• CV_CAP_PROP_CONTRAST Contrast of the image (only for cameras).
• CV_CAP_PROP_SATURATION Saturation of the image (only for cameras).
• CV_CAP_PROP_HUE Hue of the image (only for cameras).
• CV_CAP_PROP_GAIN Gain of the image (only for cameras).
• CV_CAP_PROP_EXPOSURE Exposure (only for cameras).
• CV_CAP_PROP_CONVERT_RGB Boolean flags indicating whether images should be converted to RGB.
• CV_CAP_PROP_WHITE_BALANCE Currently unsupported
• CV_CAP_PROP_RECTIFICATION Rectification flag for stereo cameras (note: only supported by DC1394 v 2.x backend currently)

某些值可以用cap.set(propId,value)来修改,value是想要设置的新值

2.从文件播放视频

  把摄像头捕获中的0改成视频文件就可以了。需要注意的是在播放视频时使用cv2.waiKey()设置适当的持续时间(帧间频率),如果设置的太低视频会播放的很快,太大又会播的太慢,一般设为25ms即可

  

3.保存视频

需要注意到地方都写在代码注释里了

# -*- coding:utf-8 -*-

import numpy as np
import cv2 cap = cv2.VideoCapture(0)#cap仅仅是摄像头的一个对象 fourcc = cv2.VideoWriter_fourcc(*'XVID')#指定编码格式,Windows使用XVID,注意该写法是固定的
out = cv2.VideoWriter('output.avi',fourcc,20.0,(640,480))#定义一个视频存储对象,以及视频编码方式,帧率,视频大小格式,最后一项设定灰度图(默认为True彩色,但试了一下改成False视频生成会出错) while (cap.isOpened()):
ret,frame = cap.read()
if ret == True:
# frame = cv2.flip(frame,0)#将图像翻转 out.write(frame)#保存每一帧合并成视频 cv2.imshow('frame',frame)
if cv2.waitKey(1) == ord('q'):
break
else:
break cap.release()
out.release()
cv2.destroyAllWindows()

OpenCV学习笔记(2)——如何用OpenCV处理视频的更多相关文章

  1. Opencv学习笔记1:安装opencv和VS2015并进行环境配置

    用了Opencv一段时间了,简单记录一下opencv在vs2015下的配置. 第一部分:OpenCV3.2.0的下载 OpenCV官方下载地址: https://opencv.org/releases ...

  2. OpenCV学习笔记(二)——OpenCV环境变量配置

    1.  假定电脑上已经安装了VS2010程序,若没有,首先安装vs2010. 下载OpenCV,下载的文件名为"OpenCV-2.3.1-win-superpack". 2.  解 ...

  3. OpenCV学习笔记(一)——OpenCV安装

    1.无脑安装以下安装文件 cn_visual_studio_2010_ultimate_x86_dvd_532347.iso 2.测试Hello OpenCV 文件→新建→项目 win32应用程序→下 ...

  4. opencv学习笔记(七)SVM+HOG

    opencv学习笔记(七)SVM+HOG 一.简介 方向梯度直方图(Histogram of Oriented Gradient,HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子 ...

  5. opencv学习笔记(六)直方图比较图片相似度

    opencv学习笔记(六)直方图比较图片相似度 opencv提供了API来比较图片的相似程度,使我们很简单的就能对2个图片进行比较,这就是直方图的比较,直方图英文是histogram, 原理就是就是将 ...

  6. opencv学习笔记(五)镜像对称

    opencv学习笔记(五)镜像对称 设图像的宽度为width,长度为height.(x,y)为变换后的坐标,(x0,y0)为原图像的坐标. 水平镜像变换: 代码实现: #include <ios ...

  7. opencv学习笔记(四)投影

    opencv学习笔记(四)投影 任选了一张图片用于测试,图片如下所示: #include <cv.h> #include <highgui.h> using namespace ...

  8. opencv学习笔记(三)基本数据类型

    opencv学习笔记(三)基本数据类型 类:DataType 将C++数据类型转换为对应的opencv数据类型 OpenCV原始数据类型的特征模版.OpenCV的原始数据类型包括unsigned ch ...

  9. opencv学习笔记(二)寻找轮廓

    opencv学习笔记(二)寻找轮廓 opencv中使用findContours函数来查找轮廓,这个函数的原型为: void findContours(InputOutputArray image, O ...

随机推荐

  1. Java基础加强-泛型

    /*泛型*/ (泛型是给编译器看的) 泛型是提供给 /*javac编译器使用的*/,可以限定集合中的输入类型,让编译器挡住源程序中的非法输入,编译器编译带类型带类型说明的集合时,会去掉 "类 ...

  2. rarcrack破解rar密码

    kail系统里没有rarcrack工具,需要先在linux安装rarcrack,安装方式如下:apt-get install rarcrack可以对设置密码的压缩包zar直接进行破解,不用字典,直接进 ...

  3. 阿里P7告诉你什么是java并发包、线程池、锁

    并发包 java.util.concurrent从jdk1.5开始新加入的一个包,致力于解决并发编程的线程安全问题,使用户能够更为快捷方便的编写多线程情况下的并发程序. 同步容器 同步容器只有包括Ve ...

  4. Kinect for Windows SDK开发入门(三):基础知识 下

    原文来自:http://www.cnblogs.com/yangecnu/archive/2012/04/02/KinectSDK_Application_Fundamentals_Part2.htm ...

  5. 如何实现数组和 List 之间的转换?(未完成)

    如何实现数组和 List 之间的转换?(未完成)

  6. ndk学习之C语言基础复习----指针、函数、预处理器

    指针: 指针乃C.C++的灵魂之所在,所以有必要好好的复习复习.什么是指针?一句话来概括:“指针是一个变量,它的值是一个地址.”,其中指针变量的声明有如下三种形式: 其中第一种是被推荐的写法. 其中还 ...

  7. Java基础 @org.junit.Test-单元测试方法 + 操纵Collection和Map的工具类 : Collections 的sort/binarySearch/max/min等静态方法

      单元测试代码:  ( 在IDEA中先输入'@Test '然后根据提示进行自动修订即可!!运行时直接运行即可! 若有多个单元测试块的时候,直接把鼠标放在哪里就自动在哪里运行那个单元块) import ...

  8. jQuery序列化乱码解决

    query之提交序列化表单(serialize)及乱码处理1 提交乱码处理JSP文件声明如下 <%@ page language="java" pageEncoding=&q ...

  9. Java8-LongAccumulator

    import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util ...

  10. BZOJ 2145: 悄悄话 (打表)

    BZOJ 2145 题解 直接代词,所有格,常用副词,助动词,冠词,常用词打表 比较出现次数的多少来决定循环位移了几位. CODE #include <bits/stdc++.h> usi ...