当前位置: 首页 > news >正文

【计算机视觉(2)】

基于Python的OpenCV基础入门——视频的处理

  • 视频
    • OpenCV视频处理操作:
      • 创建视频对象
      • 判断视频是否成功初始化
      • 读取视频帧
      • 获取视频特征
      • 设置视频参数
      • 声明编码器
      • 保存视频
      • 释放视频对象
    • 视频处理基本操作的代码实现:

视频

视频是由一系列连续的图像帧组成的。每一帧都是视频中的一张静止图像,它们以非常快的速度连续播放,给人一种连续运动的感觉。视频的帧率指的是每秒钟播放的帧数,常见的帧率有24帧/秒、30帧/秒和60帧/秒等。帧率越高,视频播放越流畅。视频的处理就是通过循环将视频流中的所有的帧进行处理

OpenCV视频处理操作:

创建视频对象

cap = cv2.VideoCapture(value)
参数:
设备索引或者一个视频文件名。摄像头读取则是设备索引,0为默认摄像头;视频文件读取则为filename

判断视频是否成功初始化

ret = cap.isOpened()
返回值:
ret :bool类型,成功则为True,否则为False。

读取视频帧

ret, frame = video.read()
返回值:
ret:bool类型,判断是否读取到帧,成功为True,否则为False。
frame:读取到的帧

获取视频特征

cap.get(propId)
参数:
propId : 0 到 18 之间的整数。每一个数代表视频的一个属性,在这里仅举几个常用的参数:

int属性propld
0视频文件的当前位置(毫秒)CV_CAP_PROP_POS_FRAMES
1下一步要解码/捕获的帧的基于0的索引CV_CAP_PROP_POS_AVI_RATIO
3视频流中帧的宽度CV_CAP_PROP_FRAME_HEIGHT
4视频流中帧的高度CV_CAP_PROP_FPS
5帧率CV_CAP_PROP_FOURCC

设置视频参数

cap.set(propId, value)
参数:
propId : 0 到 18 之间的整数
value:设置的新值

声明编码器

fourcc = cv2.VideoWriter_fourcc(‘M’, ‘P’, ‘4’, ‘V’ ) , FourCC 是用于指定视频解码器的 4 字节代码。

参数说明
‘M’, ‘P’, ‘4’, ‘V’MPEG-4编码类型,文件扩展名为 .mp4
‘X’,‘2’,‘6’,‘4’MPEG-4编码类型,文件扩展名为.mp4
‘P’,‘I’,‘M’,‘I’MPEG-1编码类型,文件扩展名为.avi
‘X’, ‘V’, ‘I’, ‘D’MPEG-4编码类型,文件扩展名为.avi
‘I’, ‘4’, ‘2’, ‘0’YUV编码类型,文件扩展名为avi

保存视频

out = cv2.VideoWriter(filename,fourcc, fps, frameSize)
参数:
filename:视频保存的位置
fourcc:指定视频编解码器的4字节代码
fps:帧率
frameSize:帧大小

释放视频对象

capture.release(),释放视频对象是必要的清理操作

视频处理基本操作的代码实现:

import cv2cap = cv2.VideoCapture('img/1.mp4')while(cap.isOpened()):ret, frame = cap.read()if ret == True:cv2.imshow('frame', frame)if cv2.waitKey(1) & 0xFF == ord('q'):breakelse:break

实现效果如下图:
在这里插入图片描述

相关文章:

  • 【LeetCode算法】第83题:删除排序链表中的重复元素
  • 一文搞透常见的Python编码陷阱(上)(分析+案例)
  • 如何判断一个对象是否已经被回收?
  • C++ 常用UI库
  • 如何消除*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS。如何消除函数未使用的警告
  • HTTPS能否避免流量劫持?如何实现HTTPS
  • 正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-24.1,2 SPI驱动实验-SPI协议介绍
  • 【软件测试】bug篇|软件测试的生命周期|描述bug的要素|bug的级别|bug的生命周期|高频面试题:与开发产⽣争执怎么处理
  • SSL VPN
  • C++系列-定位new表达式(placement-new)
  • 一个程序员的牢狱生涯(40)好事
  • 谈谈BlueStore的BitmapAllocator
  • D - New Friends(AtCoder Beginner Contest 350)
  • 海外仓快递系统哪个好?教你快速选到适合自己的管理系统
  • # linux 中使用 visudo 命令,怎么保存退出?
  • [译]Python中的类属性与实例属性的区别
  • 07.Android之多媒体问题
  • 2019.2.20 c++ 知识梳理
  • Docker 笔记(2):Dockerfile
  • java2019面试题北京
  • java多线程
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • PAT A1050
  • 当SetTimeout遇到了字符串
  • 分享一份非常强势的Android面试题
  • 工作手记之html2canvas使用概述
  • 简单实现一个textarea自适应高度
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 设计模式(12)迭代器模式(讲解+应用)
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 详解移动APP与web APP的区别
  • 主流的CSS水平和垂直居中技术大全
  • Spring Batch JSON 支持
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • # AI产品经理的自我修养:既懂用户,更懂技术!
  • #162 (Div. 2)
  • #mysql 8.0 踩坑日记
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • $LayoutParams cannot be cast to android.widget.RelativeLayout$LayoutParams
  • (21)起落架/可伸缩相机支架
  • (arch)linux 转换文件编码格式
  • (ZT)薛涌:谈贫说富
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (二)pulsar安装在独立的docker中,python测试
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (四)鸿鹄云架构一服务注册中心
  • (一)RocketMQ初步认识
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .bat批处理(六):替换字符串中匹配的子串
  • .bat批处理(十一):替换字符串中包含百分号%的子串
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .NET MVC第五章、模型绑定获取表单数据
  • .Net OpenCVSharp生成灰度图和二值图