摄像头采集图像的Python程序

摄像头采集图像的Python程序 mini菜 2023-06-12 18:03:08 766

程序性质

个人制作的模板,整理上传做备份。
程序刷新率可能显示有问题,还没有发现原因。

运行需要

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()
声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
mini菜
红包 点赞 收藏 评论 打赏
评论
0个
内容存在敏感词
手气红包
    易百纳技术社区暂无数据
相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
mini菜
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区