[Python Study Notes]物体运动检测
基于opencv的cv2模块实现
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
>>文件: iot_client.py
>>作者: liu yang
>>邮箱: liuyang0001@outlook.com
>>博客: www.cnblogs.com/liu66blog
>>博客: liuyang1.club (抱歉,域名备案中,稍后恢复访问) ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' #!/usr/bin/env python
# -*- coding: utf-8 -*- import cv2
import numpy as np
import easygui
import datetime
from twilio.rest import Client # 打开摄像头
camera= cv2.VideoCapture(0)
# 如果摄像头打开失败
if camera.isOpened() == False:
# 给与友好性提示
easygui.msgbox("\n\n\n\n\n\n 请保证摄像头可以正常被打开,请检查硬件后重新运行",title='提示框',ok_button='确定')
# 得到摄像头的图像尺寸
size = (int(camera.get(cv2.CAP_PROP_FRAME_WIDTH)),
int(camera.get(cv2.CAP_PROP_FRAME_HEIGHT)))
# 打印尺寸
print('size:'+repr(size))
es = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5,4))
kernel = np.ones((5,5),np.uint8)
background = None
flag = 0
while True:
# 有没有检测到的文本
text = "Undetected"
# 读取摄像头的参数
grabbed , frame_lwpCV=camera.read()
try:
# 将图像转换为RGB
gray_lwpCV = cv2.cvtColor(frame_lwpCV,cv2.COLOR_RGB2GRAY)
# 将图像进行高斯滤波,去除噪点
gray_lwpCV = cv2.GaussianBlur(gray_lwpCV,(25,25),3)
except cv2.error:
break # 判断是否有标准的背景图,如果没有就将上面摄像头采集的第一帧的图像作为背景图
if background is None:
background = gray_lwpCV
continue
# 将两个图像进行比较
diff = cv2.absdiff(background,gray_lwpCV)
diff = cv2.threshold(diff,50,255,cv2.THRESH_BINARY)[1]
# 进行3次膨胀
diff = cv2.dilate(diff,es,iterations=3) # 忽略掉一些很小的因素
image , contours , hierarchy = cv2.findContours(diff.copy(),cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
for c in contours:
# 如果变化的狂过小,则忽略
if cv2.contourArea(c) < 2000:
continue
(x, y, w, h) = cv2.boundingRect(c)
cv2.rectangle(frame_lwpCV, (x, y), (x + w, y + h), (0, 255, 0), 2)
# 有物体闯入到背景中,以文本标记
text = "Detected" # 如果文本标记为无
if text == "Undetected" :
# 在图像上标出
cv2.putText(frame_lwpCV,"Motion: {}".format(text),(10,20),
cv2.FONT_HERSHEY_SIMPLEX,0.5,(0,255,0),2)
# 放置时间戳
cv2.putText(frame_lwpCV,datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
(10,frame_lwpCV.shape[0]-10),cv2.FONT_HERSHEY_SIMPLEX,0.35,(0,255,0),2) # 如果检测到
if text == "Detected" :
cv2.putText(frame_lwpCV,"Motion: {}".format(text),(10,20),
cv2.FONT_HERSHEY_SIMPLEX,0.5,(0,0,255),2)
cv2.putText(frame_lwpCV,datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
(10,frame_lwpCV.shape[0]-10),cv2.FONT_HERSHEY_SIMPLEX,0.35,(0,255,0),2)
# 蒋告警标志位置为1
flag=1 # 判断告警标志位
if flag == 1:
# 接入一些接口,进行对用户的警示,微信,丁丁,短信 ...等等
# 然后将标志位置为0
pass # 显示图像
cv2.imshow('contours',frame_lwpCV)
# 灰度图像的显示
# cv2.imshow('dis',diff) # 添加退出键--q
# 按下退出本次监测
key = cv2.waitKey(1) & 0xff
if key == ord('q'):
break # 退出后释放摄像头
camera.release()
cv2.destroyAllWindows() # 声明:该代码源于腾讯课堂-动脑学院-Python公开课,并加以适当修改
[Python Study Notes]物体运动检测的更多相关文章
- [Python Study Notes]匿名函数
Python 使用 lambda 来创建匿名函数. lambda这个名称来自于LISP,而LISP则是从lambda calculus(一种符号逻辑形式)取这个名称的.在Python中,lambda作 ...
- [Python Study Notes]字符串处理技巧(持续更新)
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ...
- [Python Study Notes]with的使用
在 Python 2.5 中, with 关键字被加入.它将常用的 try ... except ... finally ... 模式很方便的被复用.看一个最经典的例子: with open('fil ...
- [Python Study Notes]实现对键盘控制与监控
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ...
- [Python Study Notes]实现对鼠标控制
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ...
- [Python Study Notes]批量将wold转换为pdf
本文代码,由原ppt2pdf.py进行改写 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ...
- [Python Study Notes]批量将ppt转换为pdf v1.0
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ...
- [Python Study Notes]CS架构远程访问获取信息--SERVER端v2.0
更新内容: 1.增加内存信息获取 2.增加电池信息获取 3.增加磁盘信息获取 4.重新布局窗体 5.增加窗体名称 6.增加连接成功之前,不可按压 ''''''''''''''''''''''''''' ...
- [Python Study Notes]CS架构远程访问获取信息--Client端v2.0
更新内容: 1.增加内存信息获取 2.增加电池信息获取 3.增加磁盘信息获取 4.重新布局窗体 5.增加窗体名称 6.增加连接成功之前,不可按压 效果图: '''''''''''''''''''''' ...
随机推荐
- SQL Server集成服务最佳实践:语句优化
SQL Server集成服务(SQL Server Integration Services,SSIS)在其前辈DTS(Data Transformation Services,数据转换服务) ...
- php的http数据传输get/post...
php的http数据传输get/post... 一般有:file_get_contents,curl,fsockopen.... 下面介绍fsockopen: //构造要post的字符串 $argv ...
- java: scanner(输入流)文本扫描类
//scanner是接受system.in输入流的操作类 //scanner同时也支持文件输入流的操作 //一个可以使用正则表达式来分析基本类型和字符串的简单文本扫描器 Scanner scan = ...
- 2017-02-20 安装Sql Server2016+配置Java环境
昨天在安装Sql Server 2016时,在前面的规则检查结果中,出现“Polybase要求安装Oracle JRE7更新51(64位)或更高版本”规则失败的错误,如图 解决方案为,下载安装jdk, ...
- 解决 Amoeba连接mysql出错 解决方案
今天配置mysql的主从复制 用到了Amoeba.从安装到启动服务,我深深地体会到学运维的不易. 首先是 安装错误 的解决,连接错误 的兄弟可以直接往下拉. 安装错误 1.出现 JAVA_HOM ...
- display:none和visible:hidden两者的区别
display:none和visible:hidden都能把网页上某个元素隐藏起来,但两者有区别:display:none ---不为被隐藏的对象保留其物理空间,即该对象在页面上彻底消失,通俗来说就是 ...
- APP测试的那些坑
在记录app测试走过的那些坑之前,先总结下app测试的工作主要有哪些: 1.功能测试,无论是什么软件产品,必不可少的就是功能测试.我们需要测试这款app产品的功能是否完善,是否符合客户需求,是否符 ...
- 团队小组NABCD(通用作业和个人作业)特点
NABCD框架(通用作业和个人作业): N(need,需求): 你的创意解决了用户的什么需求? 使用户能够很好的区分作业情况,将班里所有同学的作业和自己私人的作业分开,通用作业指在一个班一同上课的公共 ...
- 选择排序—简单选择排序(Simple Selection Sort)原理以及Java实现
基本思想: 在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换:然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素 ...
- 在sql查询中为了提高查询效率,我们常常会采取一些措施对查询语句进行sql优化,下面总结的一些方法,有需要的可以参考参考。
转载https://www.cnblogs.com/zhang-bo/p/9138151.html 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建 ...