[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.增加连接成功之前,不可按压 效果图: '''''''''''''''''''''' ...
随机推荐
- 分布式_理论_01_CAP定理
一.前言 五.参考资料 1.分布式理论(一) - CAP定理——零壹技术栈 2.分布式理论(一) —— CAP 定理——莫那一鲁道 3.分布式系统理论基础 - CAP 4.分布式系统的CAP理论
- vue mint ui 手册文档对于墙的恐惧
http://www.cnblogs.com/smallteeth/p/6901610.html npm 安装 推荐使用 npm 的方式安装,它能更好地和 webpack 打包工具配合使用. npm ...
- mysql1130远程连接没有权限的解决方法
网上查了半天,终于解决 远程连接没有权限的原因有两种,一个是因为mysql的限制,一个是防火墙的限制. ,解决防火墙限制: 在mysql服务主机上将防火墙关闭或者在防火墙高级设置里面加入出入站规则,加 ...
- 【转】Python获取当前系统时间
转自:https://www.cnblogs.com/-ldzwzj-1991/p/5889629.html 取得时间相关的信息的话,要用到python time模块,python time模块里面有 ...
- nginx 400
做服务器nginx配置的时候有出现过 400 Bad Request 服务器无法理解请求的格式,客户端不应当尝试再次使用相同的内容发起请求.
- 市场上 MLCC 226 电容现象
市场上 MLCC 226 电容现象 三星 X7R 1206 没有 16V 也有人在卖. Y5V 当 X7R 卖. X5R 当 X7R 卖. 薄电容当厚的电容卖.
- [转]angular的路由机制
在谈路由机制前有必要先提一下现在比较流行的单页面应用,就是所谓的single page APP.为了实现无刷新的视图切换,我们通常会用ajax请求从后台取数据,然后套上HTML模板渲染在页面上,然而a ...
- Mesos问题汇总
1.Mesos的IP配置 我在虚拟机里面搭载了一个mesos,但是外主机无法通过http://ip:5050 我在虚拟机内部测试发现wget localhost:5050可以正常访问:但是wget i ...
- CF 622F The Sum of the k-th Powers——拉格朗日插值
题目:http://codeforces.com/problemset/problem/622/F 发现 sigma(i=1~n) i 是一个二次的多项式( (1+n)*n/2 ),sigma(i=1 ...
- spring事务-说说Propagation及其实现原理
前言 spring目前已是java开发的一个事实标准,这得益于它的便利.功能齐全.容易上手等特性.在开发过程当中,操作DB是非常常见的操作,而涉及到db,就会涉及到事务.事务在平时的开发过程当中,就算 ...