【opencv系列03】OpenCV4.X视频获取与显示

一、 视频获取与显示

VideoCapture类实现视频获取,可以从摄像头或者文件进行视频读取。首先,创建一个VideoCapture对象,参数可以是设备索引(摄像头索引)或视频文件的名称。如果是设备索引,当只连接一台摄像机时,可以是0或-1;也可以通过传递1来选择第二个摄像头。然后,便可以通过该对象一帧一帧的获取视频图像帧。最后,释放VideoCapture对象。

显示视频图像帧,涉及到的opencv函数包括:

创建对象:cap = cv2.VideoCapture(0)

打开视频进行初始化:cap.open()

判断是否初始化成功:cap.isOpened()

读取视频帧:cap.read() 返回是否有图像帧以及图像帧数据。

获取视频的属性:cap.get(propld) propId从0-18,每个数字代表一个视频属性?。

设置视频属性值:cap.set(propId, value) 上述部分属性值可通过该函数设置,value表示更新值。

视频对象资源释放:cap.release()

从摄像头获取视频,并将其转换为灰度视频进行显示。

import cv2
import numpy as np

# 从摄像头ID获取视频,从文件获取改为视频文件路径
cap = cv2.VideoCapture(0)
if not cap.isOpened():
    print("Cannot open camera")
    exit()
while(True):
    # 一帧帧读取视频z
    ret, frame = cap.read()

    # 都每一帧进行处理
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    # 显示处理后图片
    cv2.imshow(‘frame‘, gray)
    #若检测到按键 ‘q’,退出
    if cv2.waitKey(1) & 0xFF == ord(‘q‘):
        break

# When everything done, release the capture
cap.release()#释放摄像头
cv2.destroyAllWindows()#删除全部窗口

二、 视频保存

VideoWriter类实现视频保存,首先,创建一个VideoWriter对象并指定输出文件名(例如:output.avi)。然后指定FourCC代码、帧率(FPS)、帧的高宽以及isColor标志,如果是True,则编码器需要彩色帧,否则它适用于灰度帧。

FourCC

用四个字符来表示压缩帧编码,可以在fourcc.org中找到可用代码列表。它取决于平台.

  • 在Fedora中:DIVX,XVID,MJPG,X264,WMV1,WMV2.(XVID更为可取.MJPG会产生高大小的视频.X264可以提供非常小的视频)
  • 在Windows中:DIVX(更多要测试和添加)
  • 在OSX中:MJPG(.mp4),DIVX(.avi),X264(.mkv)

FourCC代码通过cv2.VideoWriter_fourcc()传递,比如:

对于MJPG,FourCC代码作为cv2.VideoWriter_fourcc(‘M‘,‘J‘,‘P‘,‘G‘)或cv2.VideoWriter_fourcc(*‘MJPG‘)传递。

从文件获取视频,在垂直方向上翻转每一帧并保存它。

import cv2 

cap = cv2.VideoCapture(‘input.avi‘)

# 创建VideoWriter对象,并设置fourcc
fourcc = cv2.VideoWriter_fourcc(*‘XVID‘)
out = cv2.VideoWriter(‘output.avi‘, fourcc, 20.0, (640, 480))

while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        print("Can‘t receive frame (stream end?). Exiting ...")
        break

    frame = cv2.flip(frame, 0)

    # 处理后的帧写入对象
    out.write(frame)
    cv2.imshow(‘frame‘, frame)
    if cv2.waitKey(1) & 0xFF == ord(‘q‘):
        break

# 释放所有对象和资源
cap.release()
out.release()
cv2.destroyAllWindows()

三、 应用

预处理视频:从视频文件每隔5帧截取图像帧,水平镜像翻转后保存到文件夹。

import cv2

cap = cv2.VideoCapture(‘input.avi‘)
num = 0
while cap.isOpened():
    ret, frame = cap.read()
    if ret:
        if num % 5 == 0:
            frame = cv2.flip(frame, 1)
            cv2.imwrite(‘frame_%d.jpg‘ % num, frame)
        if cv2.waitKey(1) & 0xFF == ord(‘q‘):
            break
    num += 1

# 释放所有对象和资源
cap.release()
out.release()
cv2.destroyAllWindows()

原文地址:https://www.cnblogs.com/fahaihappy/p/12555356.html

时间: 2024-11-13 08:56:40

【opencv系列03】OpenCV4.X视频获取与显示的相关文章

基于opencv在摄像头ubuntu根据视频获取

 基于opencv在摄像头ubuntu根据视频获取 1  工具 原料 平台 :UBUNTU12.04 安装库  Opencv-2.3 2  安装编译执行步骤 安装编译opencv-2.3  參考http://blog.csdn.net/xiabodan/article/details/23547847 提前下载OPENCV源代码包 官方:http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/ 我的:http://dow

基于opencv网络摄像头在ubuntu下的视频获取

 基于opencv网络摄像头在ubuntu下的视频获取 1  工具 原料 平台 :UBUNTU12.04 安装库  Opencv-2.3 2  安装编译运行步骤 安装编译opencv-2.3  参考http://blog.csdn.net/xiabodan/article/details/23547847 3  测试代码 编译 g++ cameraCaptrue.cpp -o test `pkg-config --libs --cflags opencv` cameraCaptrue.cpp

java io系列03之 ByteArrayOutputStream的简介,源码分析和示例(包括OutputStream)

前面学习ByteArrayInputStream,了解了“输入流”.接下来,我们学习与ByteArrayInputStream相对应的输出流,即ByteArrayOutputStream.本章,我们会先对ByteArrayOutputStream进行介绍,在了解了它的源码之后,再通过示例来掌握如何使用它. 转载请注明出处:http://www.cnblogs.com/skywang12345/p/io_03.html ByteArrayOutputStream 介绍 ByteArrayOutpu

Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例

java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java 集合系列 04 LinkedList详细介绍(源码解析)和使用示例 概要 上一章,我们学习了Collection的架构.这一章开始,我们对Collection的具体实现类进行讲解:首先,讲解List,而List中ArrayList又最为常用.因此,本章我们讲解ArrayList.先对ArrayLis

opencv播放,变换和保存视频

核心函数: 1. cvCreateFileCapture 2. cvGetCaptureProperty 3. cvQueryFrame 4. cvCreateVideoWriter 5. cvWriteFrame 程序: #include "cv.h" #include "cxcore.h" #include "highgui.h" #include <iostream> #include <stdio.h> int V

JavaScript进阶系列03,通过硬编码、工厂模式、构造函数创建JavaScript对象

本篇体验通过硬编码.工厂模式.构造函数来创建JavaScript对象. □ 通过硬编码创建JavaScript对象 当需要创建一个JavaScript对象时,我们可能这样写: var person = { firstName: "Darren", lastName: "Ji", getFullName: function() { return this.firstName + " " + this.lastName; } }; 如果需要创建2个结

KINECT+opencv基于骨骼信息对视频进行动作识别

KINECT+opencv基于骨骼信息对视频进行动作识别 环境:kinect1.7+opencv2.4+vc2015 使用kinect获取并按批处理三维空间内的骨骼信息 基于视频帧差计算各关节运动向量并与本地模板匹配 目录 KINECTopencv基于骨骼信息对视频进行动作识别 目录 写在前面 对当前帧处理并匹配 kinect对帧的处理 与模板的向量余弦计算 根据动态时间规划法匹配 记录并保存模板到本地 使用opencv的FileStorage类生成xml文件 写在前面 自前一篇过去一周了.这次

我给女朋友讲编程html系列(9)—颜色值及如何获取颜色值和下载软件小技巧

一.颜色名 大多数的浏览器都支持颜色名集合. 仅仅有 16 种颜色名被 W3C 的 HTML4.0 标准所支持.它们是:aqua, black, blue, fuchsia, gray, green, lime, maroon, navy, olive, purple, red, silver, teal, white, yellow. 其实这里面只需要记住下面几个常用的就行了: 序号 颜色名 意思 1 red 红色 2 green 绿色 3 blue 蓝色 红绿蓝是颜色3原色,按不同比例混合可

委托、Lambda表达式、事件系列03,从委托到Lamda表达式

在"委托.Lambda表达式.事件系列02,什么时候该用委托"一文中,使用委托让代码简洁了不少. namespace ConsoleApplication2 { internal delegate bool MyCalculateDelegate(int val); class Program { static void Main(string[] args) { IEnumerable<int> source = new List<int>(){2, 3, 4