当前位置: 首页 > 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 命令,怎么保存退出?
  • “大数据应用场景”之隔壁老王(连载四)
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • Angular 响应式表单 基础例子
  • Date型的使用
  • Flex布局到底解决了什么问题
  • isset在php5.6-和php7.0+的一些差异
  • Ruby 2.x 源代码分析:扩展 概述
  • Sass Day-01
  • Spring-boot 启动时碰到的错误
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 飞驰在Mesos的涡轮引擎上
  • 构建工具 - 收藏集 - 掘金
  • 基于HAProxy的高性能缓存服务器nuster
  • 今年的LC3大会没了?
  • 浅谈Golang中select的用法
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 设计模式走一遍---观察者模式
  • 深度解析利用ES6进行Promise封装总结
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 消息队列系列二(IOT中消息队列的应用)
  • 小程序开发之路(一)
  • 原生js练习题---第五课
  • 转载:[译] 内容加速黑科技趣谈
  • C# - 为值类型重定义相等性
  • MyCAT水平分库
  • UI设计初学者应该如何入门?
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • # 达梦数据库知识点
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • (BAT向)Java岗常问高频面试汇总:MyBatis 微服务 Spring 分布式 MySQL等(1)
  • (poj1.2.1)1970(筛选法模拟)
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (南京观海微电子)——COF介绍
  • (十六)串口UART