当前位置: 首页 > 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 命令,怎么保存退出?
  • iOS编译提示和导航提示
  • js中的正则表达式入门
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • mysql 5.6 原生Online DDL解析
  • PAT A1092
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 不上全站https的网站你们就等着被恶心死吧
  • 飞驰在Mesos的涡轮引擎上
  • 两列自适应布局方案整理
  • 码农张的Bug人生 - 见面之礼
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 我的zsh配置, 2019最新方案
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • 一起来学SpringBoot | 第三篇:SpringBoot日志配置
  • 一些关于Rust在2019年的思考
  • 移动端唤起键盘时取消position:fixed定位
  • 译自由幺半群
  • 用Canvas画一棵二叉树
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • # include “ “ 和 # include < >两者的区别
  • # 消息中间件 RocketMQ 高级功能和源码分析(七)
  • (1)Nginx简介和安装教程
  • (2024)docker-compose实战 (9)部署多项目环境(LAMP+react+vue+redis+mysql+nginx)
  • (23)Linux的软硬连接
  • (3)医疗图像处理:MRI磁共振成像-快速采集--(杨正汉)
  • (pojstep1.3.1)1017(构造法模拟)
  • (二)斐波那契Fabonacci函数
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • (转)Linux下编译安装log4cxx
  • .net core控制台应用程序初识
  • .net FrameWork简介,数组,枚举
  • .NetCore Flurl.Http 升级到4.0后 https 无法建立SSL连接