技术专栏
摄像头采集图像的Python程序
程序性质
个人制作的模板,整理上传做备份。
程序刷新率可能显示有问题,还没有发现原因。
运行需要
Windows平台、OpenCV2、Python3.6
程序
#本程序是摄像头采集图像的观察程序
#程序实现:从摄像头按帧读入视频流,创建定时器计算刷新速度,图像显示在窗口中。
#程序依赖:OpenCV2库
#程序参考:
#Python的定时器:https://blog.csdn.net/saltriver/article/details/52194915
#opencv python 从摄像头获取视频、帧率、分辨率等属性设置和使用:https://blog.csdn.net/weixin_41010198/article/details/88535234
#程序编写:燕卫博
#程序生成日期:2019年7月5日(星期五)
import threading # 用于构造定时器
import time # 用于获取时间
import cv2 # 用于提供OpenCV2
#******************************************************************************************全局变量初始化****
Program_polling_Cnt=0
Video_Play_Cnt=0
#******************************************************************************************函数定义**********
def Do_PPC_Timer1s(): # 定时器Timer1s溢出服务函数
global Program_polling_Cnt # 声明FPS计数变量为全局变量
print("程序刷新率:",Program_polling_Cnt,"次/秒") # 显示1秒之内对读入图像帧数的计数值作为实时FPS
Program_polling_Cnt=0 # 清空计数值
global PPC_Timer1s # 声明定时器对象为全局
PPC_Timer1s=threading.Timer(1,Do_PPC_Timer1s) # 重置定时器
PPC_Timer1s.start() # 重新启动定时器
def Do_VIP_Timer1s(): # 定时器Timer1s溢出服务函数
global Video_Play_Cnt # 声明VIP计数变量为全局变量
print("视频刷新率:",Video_Play_Cnt,"帧/秒") # 显示1秒之内对读入图像帧数的计数值作为实时FPS
Video_Play_Cnt=0 # 清空计数值
global VIP_Timer1s # 声明定时器对象为全局
VIP_Timer1s=threading.Timer(1,Do_VIP_Timer1s) # 重置定时器
VIP_Timer1s.start() # 重新启动定时器
def Camera_init():
print("-"*20)
print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())),"正在初始化摄像头...")
global cap
cap=cv2.VideoCapture(0,cv2.CAP_DSHOW)#参数cv2.CAP_DSHOW是微软特有的,用于防止释放摄像头时的[ WARN:0] terminating async callback警告
if not cap.isOpened():
print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())),"无法打开摄像头,程序即将退出!")
cap.release()
cv2.destroyAllWindows()
print("-"*20)
exit()
print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())),"摄像头对象创建成功,现在自定义摄像头...")
# print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())),"设置摄像头采集格式为MIPEG...",end="")
# cap.set(6,cv2.VideoWriter.fourcc('M', 'J', 'P', 'G'))
# print("完成")
print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())),"设置帧宽度640像素...",end="")
cap.set(3,640)
print("完成")
print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())),"设置帧高度480像素...",end="")
cap.set(4,480)
print("完成")
print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())),"设置硬件帧率30fps...",end="")
cap.set(cv2.CAP_PROP_FPS,30)
print("完成")
print("[LSS 标注]摄像头硬件帧率设置可能是无效的!")
print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())),"重新读取摄像头参数...")
cap_width=cap.get(3)
cap_height=cap.get(4)
print("当前摄像头分辨率:",int(cap_width),"X",int(cap_height))
cap_fps=cap.get(5)
print("当前摄像头帧率:",cap_fps,"fps")
print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())),"初始化操作已完成,进入主循环")
print("-"*20)
PPC_Timer1s=threading.Timer(1, Do_PPC_Timer1s) # 创建定时器线程Timer1s,定时1秒
PPC_Timer1s.start() # 启动定时器Timer1s
def Camera_Flash():
global Program_polling_Cnt
camera_ret, camera_img = cap.read() # 读取摄像头的一帧
cv2.imshow("Camera Image",camera_img) # 显示
Program_polling_Cnt+=1 # 用于计算实时帧率的全局变量,在每一次获取图像后自增
camera_Key_check()
def End_Processing(flag):
print("-"*20)
print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())),"摄像头操作:正在关闭定时器...",end="")
PPC_Timer1s.cancel()#停止定时器运行
print("完成")
print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())),"摄像头操作:正在释放摄像头...",end="")
cap.release()
print("完成")
print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())),"摄像头操作:正在销毁窗口...",end="")
cv2.destroyAllWindows()
print("完成")
print("-"*20)
print("程序结束\n")
def camera_Key_check():
if cv2.waitKey(1) & 0xFF == ord("Q"):
End_Processing(False)
exit()
#******************************************************************************************初始化操作********
Camera_init()
#******************************************************************************************主循环************
while(1):
Camera_Flash()
声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
红包
点赞
收藏
评论
打赏
- 分享
- 举报
评论
0个
手气红包
暂无数据
相关专栏
-
浏览量:1115次2023-11-20 17:36:15
-
浏览量:2089次2020-04-01 10:07:10
-
浏览量:3418次2020-10-29 17:26:12
-
浏览量:1353次2023-04-17 16:03:03
-
浏览量:2248次2022-03-05 08:31:20
-
浏览量:2025次2017-12-22 21:28:55
-
浏览量:2117次2022-11-23 16:19:38
-
浏览量:692次2024-02-04 09:47:59
-
浏览量:1782次2024-01-02 22:42:19
-
浏览量:1339次2020-01-08 10:58:53
-
浏览量:1048次2023-12-08 16:23:35
-
浏览量:2523次2023-06-28 17:22:40
-
浏览量:1234次2023-08-24 13:51:18
-
浏览量:771次2023-12-13 14:01:46
-
浏览量:1427次2024-02-19 10:16:21
-
浏览量:1790次2020-03-20 10:52:14
-
2020-12-14 22:33:31
-
浏览量:1957次2023-11-20 16:48:25
-
浏览量:1417次2023-07-27 10:19:06
置顶时间设置
结束时间
删除原因
-
广告/SPAM
-
恶意灌水
-
违规内容
-
文不对题
-
重复发帖
打赏作者
mini菜
您的支持将鼓励我继续创作!
打赏金额:
¥1
¥5
¥10
¥50
¥100
支付方式:
微信支付
打赏成功!
感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~
举报反馈
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明
审核成功
发布时间设置
发布时间:
请选择发布时间设置
是否关联周任务-专栏模块
审核失败
失败原因
请选择失败原因
备注
请输入备注