python如何使用OpenCV捕获事件
这篇文章给大家分享的是有关python如何使用OpenCV捕获事件的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
1、步骤说明
定义关键事件;
将包含事件的视频片段写入到视频文件;
利用线程以确保在输入流和输出视频剪辑文件中执行I / O时,不会放慢主程序的速度;
利用内置的Python数据结构,如DEQUE队列以按顺序存放关键帧。
2、实例
#导入必要的包 fromcollectionsimportdeque#导入队列,FIFO(firstinfirstout)先进先出原则 fromthreadingimportThread fromqueueimportQueue importtime importcv2 classKeyClipWriter: #bufSize要在内存缓冲区中缓存的最大帧数 #timeout超时时间 def__init__(self,bufSize=64,timeout=1.0): #存储在内存中要保留的最大缓冲区大小以及睡眠超时期间 self.bufSize=bufSize self.timeout=timeout #初始化帧的缓冲区(64帧)、Q:待写入的视频帧、视频写入类、多线程(以避免I/O延迟) #recorderingboolean类型指示录制是否已启动 self.frames=deque(maxlen=bufSize) self.Q=None self.writer=None self.thread=None self.recording=False defupdate(self,frame): #更新帧缓冲区 self.frames.appendleft(frame) #如果正在记录,将帧加入队列 ifself.recording: self.Q.put(frame) defstart(self,outputPath,fourcc,fps): #展示正在记录关键事件帧 #表明正在录制,启动视频写入类,初始化需要写入视频文件的帧队列 self.recording=True self.writer=cv2.VideoWriter(outputPath,fourcc,fps, (600,600),True) self.Q=Queue() #循环遍历所有帧,并加入队列 foriinrange(len(self.frames),0,-1): self.Q.put(self.frames[i-1]) #开启一个单独的线程写入帧到视频文件 self.thread=Thread(target=self.write,args=()) self.thread.daemon=True self.thread.start() defwrite(self): #保持循环 whileTrue: #如果停止了录制,退出线程 ifnotself.recording: return #判断队列是否已经没有关键事件帧了 ifnotself.Q.empty(): #获取队列中的下一帧并写入视频文件 frame=self.Q.get() self.writer.write(frame) #如果队列已经空了,sleep超时时间以不浪费cpu周期 #使用队列时空闲一会儿尤其重要,队列数据结构是线程安全的,暗示必须在更新内部缓冲区之前获取锁/信号量。 #如果不sleep,当缓冲区为空时,然后写入和更新方法将不断为锁而战斗。相反,最好让视频写入类等待一会儿,直到需要写入文件的队列中存在积压的帧。 else: time.sleep(self.timeout) defflush(self): #通过刷新所有剩余帧来清空队列 whilenotself.Q.empty(): frame=self.Q.get() self.writer.write(frame) deffinish(self): #表明结束录制、加入线程 #刷新队列中的所有帧到视频文件 #释放视频写入指针 self.recording=False self.thread.join() self.flush() self.writer.release()
感谢各位的阅读!关于“python如何使用OpenCV捕获事件”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
推荐阅读
-
Python中怎么动态声明变量赋值
这篇文章将为大家详细讲解有关Python中怎么动态声明变量赋值,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文...
-
python中变量的存储原理是什么
-
Python中怎么引用传递变量赋值
这篇文章将为大家详细讲解有关Python中怎么引用传递变量赋值,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文...
-
python中怎么获取程序执行文件路径
python中怎么获取程序执行文件路径,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的...
-
Python中如何获取文件系统的使用率
Python中如何获取文件系统的使用率,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴...
-
Python中怎么获取文件的创建和修改时间
这篇文章将为大家详细讲解有关Python中怎么获取文件的创建和修改时间,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读...
-
python中怎么获取依赖包
今天就跟大家聊聊有关python中怎么获取依赖包,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据...
-
python怎么实现批量文件加密功能
-
python中怎么实现threading线程同步
小编给大家分享一下python中怎么实现threading线程同步,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!...
-
python下thread模块创建线程的方法
本篇内容介绍了“python下thread模块创建线程的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来...