Python每过3s打印摄像头图片
0. 目的
实现一个Python程序,用OpenCV调用摄像头显示图片,且每过n
秒print
图片信息。
0.1 使用OpenCV调用摄像头
用OpenCV调用摄像头的程序非常简单,如下:
import cv2# 定义摄像头对象
cap = cv2.VideoCapture(0)while True:# 获取当前图片ret, frame = cap.read()# 显示图片cv2.imshow("Result", frame)# 按下q结束if cv2.waitKey(1) & 0xFF == ord('q'):break# 释放资源
cap.release()
cv2.destroyAllWindows()
0.2 [错误用法] 直接使用time.sleep
函数
如何每隔n
秒打印信息,其实最简单的方法就是time.sleep
,我们可以看一下效果:
import cv2
import time
import numpy as np# 定义摄像头对象
cap = cv2.VideoCapture(0)while True:# 获取当前图片ret, frame = cap.read()# 显示图片cv2.imshow("Result", frame)# 错误用法:使用time.sleep进行时间间隔获取time.sleep(3)print(f"图片的shape为: {np.shape(frame)}")# 按下q结束if cv2.waitKey(1) & 0xFF == ord('q'):break# 释放资源
cap.release()
cv2.destroyAllWindows()
打印的信息的确是每隔3s进行的,但是你会发现摄像头的窗口卡死了。因为time.sleep
函数会冻结该线程,所以摄像头窗口也被冻结了!
所以直接使用time.sleep
不符合实际任务的需求。
1. 多线程的使用
为了解决上面的问题,我们需要使用多线程技术,即实现程序技术的同时又不影响其他程序的运行。
1.1 多线程的语法
import threading # 导入多线程的包def 线程方法(线程参数):#具体的操作---------- main ----------
# 创建线程对象
th_1 = threading.Thread(target=线程方法名, daemon=True/False, args=(目标线程的参数1, ))
# 开启线程
th_1.start()# 主线程(main)的方法
...
1.2 [解决方案] 使用多线程的计时
import time
import threading
import numpy as np
import cv2# 定义计数子线程
def timer(interval):while True: # 无限计时time.sleep(interval)print(f"{interval}s has pass, and the shape of camera image is: \n{np.shape(img_temp)}")"""---------------- 主线程(main) -------------------"""
if __name__ == '__main__':img_temp = None # 占位用的,目的是提升frame的作用域interval = 2 # 时间间隔(s)# 开启一个子线程"""Note:1. daemon=1. True: 主线程结束,子线程也结束2. False:主线程结束,子线程不结束(主线程需等待子线程结束后再结束)2. args=(interval, )中的 逗号 不能省略(因为传入的必须是一个tuple)"""# 1. 定义线程th1 = threading.Thread(target=timer, daemon=True, args=(interval,))# 2. 开启线程th1.start()# 创建摄像头对象cap = cv2.VideoCapture(0)while True:# 读取图片ret, frame = cap.read()# 显示图片cv2.imshow("Result", frame)# 赋值变量img_temp = frame # 将frame赋给img_temp# 定义关闭if cv2.waitKey(1) & 0xFF == ord('q'):break# 其他的程序# 释放资源cap.release()cv2.destroyAllWindows()
这样就计时就不会影响摄像头窗口图像的获取了!
Python每过3s打印摄像头图片相关推荐
- python调用打印机打印图片_pyqt5 调用打印机 打印远程图片
求助.... pyqt5 实现 打印机 打印png图片 可以预览 def localPrinter(): printer = QPrinter(QPrinter.HighResolution) # / ...
- Python + opencv对拍照得到的图片进行背景去除的实现方法
这篇文章主要介绍了Python + opencv对拍照得到的图片进行背景去除的实现方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下 有时候我们 ...
- OpenMV(三)--实时获取摄像头图片
实时获取摄像头图片 引 前言 1. 构造函数 2. 源码分析 3. 脱机运行程序 引 OpenMV(一)–基础介绍与硬件架构 OpenMV(二)–IDE安装与固件下载 前言 利用OpenMV进行机器视 ...
- Python+爬虫技术获取斗鱼直播图片(整理)
核心内容: 1.爬虫的基本原理 2.利用Python爬取数据的方法(使用urllib爬取数据) 3.从斗鱼直播平台爬取图片 最近因为工作的原因,要利用爬虫的相关技术,获取html网页相关的数据,特意总 ...
- Python利用Face++实现身份证件图片识别
引言 放假在家闲来无事,看到一个接口,于是想试着用这几天学的Python玩玩,就用Python的urllib2对接了身份证图片识别接口,这里面还有很多关于图片识别类的接口(虽然有些要钱),不过里面文字 ...
- Python+OpenCV+pyQt5录制双目摄像头视频
#Python+OpenCV+pyQt5录制双目摄像头视频 ##起因 说起来录制视频,我们可能有很多的软件,但是比较坑的是,好像很少的软件支持能够同时录制两个摄像头的视频,于是我们用python自己写 ...
- python 调用 Intel realsense D415i摄像头
1.搭建python3开发环境(wind10 ) 安装Intel.RealSense.SDK.exe后,在安装目录-/Intel RealSense SDK 2.0/bin/x64目录下有两个.pyd ...
- Python用img2pdf库批量转换图片为PDF文件
Python用img2pdf库批量转换图片为PDF文件 import os #导入os库 import time #导入时间库生成时间戳 import img2pdf #导入img2pdf库, 安装命 ...
- Python之实现自动开启摄像头拍照,后面发送邮寄给个人
Python之实现自动开启摄像头拍照,后面发送邮寄给个人 文章目录 Python之实现自动开启摄像头拍照,后面发送邮寄给个人 第一步,我们要开启电脑的摄像头实现拍照: 第二步,我们要发送邮件,就必须创 ...
最新文章
- Java虚拟机(JVM)
- 兰州理工大学计算机考研真题,2017年兰州理工大学计算机与通信学院893计算机操作系统考研题库...
- Access界面基础操作
- JZOJ 5907. 【NOIP2018模拟10.16】轻功(qinggong)
- Python多任务(1.多任务的介绍、并发和并行概念及小例子)
- 怎么将pdf转换成word
- 终于来了!微软正式推出 VS Code 测试 API
- java try的用法_Java中try、catch的使用方法
- Keith Hill的Effective Windows PowerShell.pdf下载
- iPhone 6s不死!支持升级iOS 14,还能再战两年
- 华硕笔记本r414u怎么安装键盘_华硕笔记本键盘灯怎么开
- 如何在 Mac 上设置图片或视频的默认打开应用?
- 全网最全网络安全站点汇总!还不赶快放到收藏夹里吃灰
- Android集成bilibili播放器以及弹幕
- ST推出 28nm MCU ,NXP更狠,推出16nm MCU
- 洛谷 2678 跳石头
- eNSP配置静态路由及默认路由的三种案例
- 贝叶斯优化调参-Bayesian optimiazation原理加实践
- xunsearch与mysql区别_利用 Xunsearch 搭建搜索引擎、内容搜索实战
- c#拼图碎片形状_添加你的拼图碎片