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

【P14 3-6 】OpenCV Python——视频加载、摄像头调用、视频基本信息获取(宽、高、帧率、总帧数),视频保存在指定位置

文章目录

  • 1 读取本地视频
    • 1.1 绝对路径 6种方式
    • 1.2 相对路径 4种方式
    • 1.3 读取本地视频
  • 2 视频基本信息
  • 3 调用摄像头 并将视频保存在指定位置

P14 3-6

1 读取本地视频

现在要读取本地视频“video.mp4”,

视频文件“video.mp4”和playVideo.py脚本文件,都在同一个目录E:\\Test_py\\opencv_python\\基本操作\\下面。

在这里插入图片描述

1.1 绝对路径 6种方式

#cap=cv2.VideoCapture("E:\\Test_py\\opencv_python\\基本操作\\video.mp4")
#cap=cv2.VideoCapture('E:\\Test_py\\opencv_python\\基本操作\\video.mp4')#cap=cv2.VideoCapture("E://Test_py//opencv_python//基本操作//video.mp4")
#cap=cv2.VideoCapture('E://Test_py//opencv_python//基本操作//video.mp4')#cap=cv2.VideoCapture("E:/Test_py/opencv_python/基本操作/video.mp4")
cap=cv2.VideoCapture('E:/Test_py/opencv_python/基本操作/video.mp4')

1.2 相对路径 4种方式

#cap=cv2.VideoCapture('video.mp4')
#cap=cv2.VideoCapture('./video.mp4')
#cap=cv2.VideoCapture('.//video.mp4')
cap=cv2.VideoCapture('.\\video.mp4')

1.3 读取本地视频

import cv2
from cv2 import WINDOW_NORMAL
import numpy as np#cv2.namedWindow('video',WINDOW_NORMAL)cap=cv2.VideoCapture('video.mp4')while True:ret,frame=cap.read()cv2.imshow('video',frame)key=cv2.waitKey(20)#当按下q键,退出视频,qASCII值=113,Q=81,还可以写成ord('q')#if(key & 0xff ==ord('q')):if key in (113, 81): breakcv2.destroyWindow()

在这里插入图片描述

2 视频基本信息


if(cap.read()):w=cap.get(CAP_PROP_FRAME_WIDTH)h=cap.get(CAP_PROP_FRAME_HEIGHT)fps=cap.get(CAP_PROP_FPS)count=cap.get(CAP_PROP_FRAME_COUNT)print('视频中图像宽度:%d' %(w))print('视频中图像高度:%d' %(w))print('视频的帧率:%d' %(fps))print('视频总帧数:%d' %(count))

在这里插入图片描述

3 调用摄像头 并将视频保存在指定位置

import cv2#创建VideoWriter为写多媒体文件
fourcc = cv2.VideoWriter_fourcc(*'MJPG')
vw = cv2.VideoWriter('./out.mp4', fourcc, 25, (1280, 720))#创建窗口
cv2.namedWindow('video', cv2.WINDOW_NORMAL)
cv2.resizeWindow('video', 640, 360)#获取视频设备/从视频文件中读取视频帧
cap = cv2.VideoCapture(0)#判断摄像头是否为打开关态
while cap.isOpened():#从摄像头读视频帧ret, frame = cap.read()if ret == True:#将视频帧在窗口中显示cv2.imshow('video', frame)#重新将窗口设备为指定大小cv2.resizeWindow('video', 640, 360)#写数据到多媒体文件vw.write(frame)#等待键盘事件,如果为q,退出key = cv2.waitKey(1)if(key & 0xFF == ord('q')):breakelse:break#释放VideoCapture
cap.release()#释放VideoWriter
vw.release()#vw.release()
cv2.destroyAllWindows()

在这里插入图片描述

http://www.xdnf.cn/news/18038.html

相关文章:

  • 在职老D渗透日记day18:sqli-labs靶场通关(第26关)get报错注入 过滤or和and基础上又过滤了空格和注释符 ‘闭合 手动注入
  • qt vs2019编译QXlsx
  • Linux软件编程(六)(exec 函数族、system 实现、进程回收与线程通信)
  • C++ 内存管理(内存分布 , 管理方式 , new和delete实现原理)
  • pidgen!DecodeProdKey函数分析之iDecodedBytesMax
  • 服务器硬件电路设计之I2C问答(七):解析 I2C 通信 “卡壳” 难题:从设备无响应与跨电压兼容之道
  • Spring AI Starter和文档解读
  • InfluxDB 数据迁移工具:跨数据库同步方案(一)
  • 超酷炫的Three.js示例
  • Java:File类、递归、字符集、IO流体系及Commons-io框架
  • 【大模型核心技术】Dify 入门教程
  • Flow-GRPO:通过在线 RL 训练 Flow matching 模型
  • PS插件整合包!内置数百款PS插件,支持PS2017-PS2025所有版本!
  • 【学习嵌入式day-26-线程间通信】
  • TypeScript快速入门
  • CPP多线程3:async和future、promise
  • ArrayList的contains问题
  • 机器学习 [白板推导](十二)[卡曼滤波、粒子滤波]
  • 第G7周:Semi-Supervised GAN 理论与实战
  • 【科研绘图系列】R语言绘制雷达图
  • 洛谷B3865 [GESP202309 二级] 小杨的 X 字矩阵(举一反三)
  • 从 MySQL 5.7 迁移到 8.0:别让 SQL 文件 “坑” 了你
  • 《从入门到高可用:2025最新MySQL 8.0全栈速通指南》
  • Linux配置Dante使用的pam验证
  • 【攻防实战】红队攻防之Goby反杀
  • 力扣(LeetCode) ——622. 设计循环队列(C语言)
  • Android Jetpack | Lifecycle
  • 6JSON格式转python并实现数据可视化
  • 储能领域大数据平台的设计中如何使用 Hadoop、Spark、Flink 等组件实现数据采集、清洗、存储及实时 / 离线计算,支持储能系统分析与预测
  • 人工智能中的(特征选择)数据过滤方法和包裹方法