【Python】【OpenCV】视频帧和摄像头帧操作 and 窗口显示
一、读取写入视频文件
1 import cv2
2
3 # 创建一个视屏捕获对象
4 videoCapture = cv2.VideoCapture('AVI.avi')
5
6 # 获取视频的属性值,cv2.CAP_PROP_FPS获取视频帧率
7 fps = videoCapture.get(cv2.CAP_PROP_FPS)
8
9 # cv2.CAP_PROP_FRAME_WIDTH/HEIGHT 返回float类型 获取视频帧的宽高
10 size = int(videoCapture.get(cv2.CAP_PROP_FRAME_WIDTH)), \
11 int(videoCapture.get(cv2.CAP_PROP_FRAME_HEIGHT))
12
13 '''
14 创建一个写入对象,将帧写入输出的视频
15 cv2.VideoWriter_fourcc()函数指定编码器为 I420
16 fps 和 size 指定输出的帧率和尺寸
17 '''
18 videoWrite = cv2.VideoWriter('Out.avi',
19 cv2.VideoWriter_fourcc('I', '4', '2', '0'),
20 fps, size
21 )
22
23 '''
24 对捕获到的视频对象进行读取帧,success表示是否成功读取一帧,frame表示当前帧。
25 循环读取写入输出视频。
26 '''
27 success, frame = videoCapture.read()
28 while success:
29 videoWrite.write(frame)
30 success, frame = videoCapture.read()
二、捕获摄像头帧
1 import cv2
2
3 cameraCapture = cv2.VideoCapture(0)
4
5 fps = 30
6
7 size = int(cameraCapture.get(cv2.CAP_PROP_FRAME_WIDTH)), \
8 int(cameraCapture.get(cv2.CAP_PROP_FRAME_HEIGHT))
9
10 videoWriter = cv2.VideoWriter(
11 'OutVideo_GRAB.avi',
12 cv2.VideoWriter_fourcc('I', '4', '2', '0'),
13 fps,
14 size
15 )
16
17 success, frame = cameraCapture.read()
18
19 numFramesRemaining = 10 * fps
20 while success and numFramesRemaining > 0:
21 videoWriter.write(frame)
22 success, frame = cameraCapture.read()
23 numFramesRemaining -= 1
和视频的读取写入没有什么差异,都是需要先创建一个VideoCapture Object来操作,下述是细微差别:
3 Line:VideoCapture(0),其中 0 代表设备,还可以1,2,3 分别代表不同的摄像头(如果存在),也可以输入网络摄像头,直接替换成URL即可
5 Line:需要手动设置fps的值
19 Line:需要设定一个时间,numFramesRemaining代表持续捕获300个帧,而每30个帧为一秒,所以将生成一个10秒钟的视频文件
三、窗口显示图片
1 import cv2
2
3 img = cv2.imread('CopyPic.png')
4 cv2.imshow('', img)
5 cv2.waitKey()
6 cv2.destroyAllWindows()
四、窗口显示摄像头
1 import cv2
2
3 # 检测窗口是否被点击
4 clicked = False
5
6
7 # 定义鼠标事件处理函数
8 def onMouse(event: int, x, y, flags, param):
9 global clicked
10 if event == cv2.EVENT_LBUTTONUP:
11 clicked = True
12
13
14 # 创建一个视频对象
15 cameraCapture = cv2.VideoCapture(0)
16 # 定义窗口命
17 cv2.namedWindow('Camera')
18 # 将鼠标回调函数,将鼠标事件处理函数和窗口关联起来
19 cv2.setMouseCallback('Camera', onMouse)
20
21 print('Showing camera feed. Click window or press any key to stop.')
22 # 获取当前时间的摄像头帧
23 success, frame = cameraCapture.read()
24
25 # 循环获取当前时间的摄像头帧,当按下任意按键 or 点击鼠标时则停止显示
26 while success and cv2.waitKey(1) == -1 and not clicked:
27 cv2.imshow('Camera', frame)
28 success, frame = cameraCapture.read()
29
30 # 关闭窗口
31 cv2.destroyAllWindows()
32
33 # 释放摄像头资源
34 cameraCapture.release()
针对多摄像头,我们需要先探明摄像头的设备号:
1 import cv2
2
3 for item in range(10):
4 # 创建一个object
5 camera = cv2.VideoCapture(item)
6
7 # 查询此摄像头是否能打开,如果不能则跳过,并输出一条 Error Message
8 if not camera.isOpened():
9 print(f"Can\'t open camera {item}")
10 continue
11
12 # 读取摄像头帧率
13 while True:
14 success, frame = camera.read()
15 # 当摄像头帧读取失败则跳过
16 if not success:
17 break
18
19 cv2.imshow(f'Camera device number: {item}', frame)
20
21 # 等待1毫秒,检查用户是否有键盘输入‘q’
22 if cv2.waitKey(1) == ord('q'):
23 break
24
25 camera.release()
26 cv2.destroyAllWindows()
【Python】【OpenCV】视频帧和摄像头帧操作 and 窗口显示的更多相关文章
- python opencv 处理文件、摄像头、图形化界面
转换成RGB import cv2 import numpy as ny img = ny.zeros( ( 3 , 3 ),ny.float32) img=cv2.cvtColor(img,cv2. ...
- python OpenCV视频的读取及保存
import cv2 cap = cv2.VideoCapture('rtsp://admin:hik12345@192.168.3.160/Streaming/Channels/1') fourcc ...
- 【Python | opencv+PIL】常见操作(创建、添加帧、绘图、读取等)的效率对比及其优化
一.背景 本人准备用python做图像和视频编辑的操作,却发现opencv和PIL的效率并不是很理想,并且同样的需求有多种不同的写法并有着不同的效率.见全网并无较完整的效率对比文档,遂决定自己丰衣足食 ...
- python+opencv选出视频中一帧再利用鼠标回调实现图像上画矩形框
最近因为要实现模板匹配,需要在视频中选中一个目标,然后框出(即作为模板),对其利用模板匹配的方法进行检测.于是需要首先选出视频中的一帧,但是在利用摄像头读视频的过程中我唯一能想到的方法就是: 1.在视 ...
- [zt]OpenCV如何获取视频当前的一帧图像
(OpenCV读取视频.OpenCV提取视频每一帧.每一帧图片合成新的AVI视频)CvCapture 是视频获取结构 被用来作为视频获取函数的一个参数 比如 CvCapture* cap; IplIm ...
- python+opencv读取视频,调用摄像头
引用 import cv2 import numpy 创建摄像头对象 cap = cv2.VideoCapture("videoTest/test1.mp4") #参数为视频文件目 ...
- python opencv3 窗口显示摄像头的帧
git:https://github.com/linyi0604/Computer-Vision # coding:utf8 import cv2 """ 在窗口显示摄像 ...
- opencv 读取视频内容写入图片帧
现在主要把自己平时用到的opencv功能记录到博客,一方面方便自己有时间来回顾,另一方便提供给大家一个参考. opencv 读取视频内容,把视频帧每一帧写成图片,存入电脑中.这个步骤是许多数据处理的基 ...
- OpenCV Python 录制视频
调用摄像头 引入库支持 初始化 调整界面大小 实时显示 录制视频并保存 fourcc问题解决 代码实现 效果展示 总结 学到实用OpenCV调用笔记本电脑的摄像头,并录制视频保存到本地硬盘的时候,出现 ...
- Python OpenCV图片转视频 工具贴(三)
Python OpenCV图片转视频 粘贴即用,注意使用时最好把自己的文件按照数字顺序命名.按照引导输入操作. # 一键傻瓜式引导图片串成视频 # 注意使用前最好把文件命名为数字顺序格式 import ...
随机推荐
- Windows 某些软件显示"口口"解决办法
和乱码不同,文字变成"口口",一般是语言环境出错了. 解决办法 开始->控制面板->区域 (时钟.语言和区域)->区域:更改设置->管理->非 Uni ...
- 在微服务环境下,远程调用feign和异步线程存在请求数据丢失问题
一.无异步线程得情况下feign远程调用: 0.登录拦截器: @Component public class LoginUserInterceptor implements HandlerInterc ...
- 解决Promise的多并发问题
提起控制并发,大家应该不陌生,我们可以先来看看多并发,再去聊聊为什么要去控制它 多并发一般是指多个异步操作同时进行,而运行的环境中资源是有限的,短时间内过多的并发,会对所运行的环境造成很大的压力,比如 ...
- [HNCTF 2022 WEEK2]e@sy_flower
花指令分析 如果没接触过花指令,先看这个博客,大致了解一下花指令 https://www.cnblogs.com/Here-is-SG/p/15802040.html 点击此处下载附件 查壳 32位, ...
- 堆的原理以及实现O(lgn)
大家好,我是蓝胖子,我一直相信编程是一门实践性的技术,其中算法也不例外,初学者可能往往对它可望而不可及,觉得很难,学了又忘,忘其实是由于没有真正搞懂算法的应用场景,所以我准备出一个系列,囊括我们在日常 ...
- xftp 7必须更新最新版本怎么解决
下载可以查看16进制的软件: Sublime Text 运行XFTP7 双击打开是:这样的 解决方案 用Sublime Text进行打开nslicense.dll, 打开之后查找"0f88 ...
- FX3U-3A-ADP模拟量和数字量之间转换
简单的例子: 0-10V对应0-8,4-20mA对应0-30 以下是对上面例子的详解: 电压: 电压(0-10V) 0-10V对应着数字量0-4000 数字量与变频器HZ量之间的关系是(4000-0) ...
- CPU占用99%
晚间迁移数据库后,第二天下午来调优,发现CPU占用达到惊人的99%,如下: 分析15:00-16:00期间AWR报告,发现SQL硬解析严重,如下: 每秒硬解析达到69.9次,library hit%太 ...
- TIM-有感BLDC转速解析
TIM-有感BLDC转速解析 1.基本概念解析 霍尔传感器的原理:通电线圈产生的磁场会使得转子所在位置会产生磁场,其中离得最近的霍尔传感器的磁场最强,进而导致最近霍尔传感器会产生最大的电压信号,这个最 ...
- 分布式应用开发的核心技术系列之——基于TCP/IP的原始消息设计
本文由葡萄城技术团队原创并首发.转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 前言 本文的内容主要围绕以下几个部分: TCP/IP的简单介绍. 消息的介绍 ...