opencv检测动态物体的实现


Posted in Python onJuly 21, 2021

之前我在超市看到当有物体经过时,监控的屏幕边缘会出现绿框。感觉蛮有意思的。来用opencv试试能不能实现类似的效果。

  我采用的检测动态物体的方法是,比较前后两帧图像,即当前画面与上一帧的画面出现了不同。我们把两帧画面进行比较。然后框选出运动的物体。我们还希望程序可以判断当前窗口到底有没有物体在运动。那么我们就需要添加一个状态。为了方便我们找到什么时间有物体移动,我打印出时间。

  当我们的程序检测到移动的物体时,会捕捉到它的轮廓,添加一个外接整矩形框,返回x,y的坐标。当不返回坐标时,则意味着没有物体运动,我们通过坐标值来是否有物体移动。并打印出当时的本地时间。

  源代码:

import cv2
import time
import numpy as np

def videos():
    cap = cv2.VideoCapture(1)
    #不设置是默认640*480,我们这里设置出来
    cap.set(3, 640)
    cap.set(4, 480)

    img_num = 0
    k = np.ones((3, 3), np.uint8)

    while True:
        success, img = cap.read()
        localtime = time.asctime(time.localtime(time.time()))

        if not img_num:
            # 这里是由于第一帧图片没有前一帧
            previous = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        gray_diff = cv2.absdiff(gray, previous)  # 计算绝对值差
        # previous 是上一帧图片的灰度图

        thresh = cv2.threshold(gray_diff, 40, 255, cv2.THRESH_BINARY)[1]
        mask = cv2.medianBlur(thresh, 3)

        close = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, k)

        cnts = cv2.findContours(close,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE)[0]
        for c in cnts:
            area = cv2.contourArea(c)
            if area > 50:
                x, y, w, h = cv2.boundingRect(c)
                cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)

                if x>0:
                    print("动",localtime)

        cv2.putText(img, localtime, (30, 30), cv2.FONT_HERSHEY_COMPLEX, 0.7, (0, 0, 255), 2)
        cv2.imshow("x", close)
        cv2.imshow("Result", img)
        img_num += 1

        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

videos()

  静:

opencv检测动态物体的实现

  动:

  当有物体经过窗口时,控制台打印出了时间。这样便于我们在录制好的视频内查找。

opencv检测动态物体的实现

opencv检测动态物体的实现

 为了方便,我在窗口左上角加入了时间和日期。

**注意!**必须把
localtime = time.asctime(time.localtime(time.time()))
放入主循环内,否则只返回调用的一瞬间的本地时间,不会程序持续。
也不可以使用time.sleep()来控制时间变化,这会影响我们视频的帧率

  这个方法的弊端是当环境光线亮度变化过大时,返回的轮廓会产生变化,导致程序判断整个屏幕都在运动,这点仍需改进。

到此这篇关于opencv检测动态物体的实现的文章就介绍到这了,更多相关opencv检测动态物体内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python写的一个简单DNS服务器实例
Jun 04 Python
Django自定义插件实现网站登录验证码功能
Apr 19 Python
python中类变量与成员变量的使用注意点总结
Apr 29 Python
Python使用plotly绘制数据图表的方法
Jul 18 Python
Python3.5装饰器典型案例分析
Apr 30 Python
selenium 安装与chromedriver安装的方法步骤
Jun 12 Python
Python中list的交、并、差集获取方法示例
Aug 01 Python
mac使用python识别图形验证码功能
Jan 10 Python
python可视化text()函数使用详解
Feb 11 Python
python3实现raspberry pi(树莓派)4驱小车控制程序
Feb 12 Python
Python使用requests xpath 并开启多线程爬取西刺代理ip实例
Mar 06 Python
用python对excel进行操作(读,写,修改)
Dec 25 Python
Python爬虫中urllib3与urllib的区别是什么
python Django框架快速入门教程(后台管理)
Python编写nmap扫描工具
Jul 21 #Python
Django模型层实现多表关系创建和多表操作
Jul 21 #Python
Python基本数据类型之字符串str
Jul 21 #Python
Python中22个万用公式的小结
Jul 21 #Python
python字典的元素访问实例详解
Jul 21 #Python
You might like
php 全文搜索和替换的实现代码
2008/07/29 PHP
PHP 执行系统外部命令 system() exec() passthru()
2009/08/11 PHP
PHP实现图片上传并压缩
2015/12/22 PHP
浅谈Yii乐观锁的使用及原理
2017/07/25 PHP
增强的 JavaScript 的 trim 函数的代码
2007/08/13 Javascript
javascript YUI 读码日记之 YAHOO.util.Dom - Part.4
2008/03/22 Javascript
javascript下判断一个对象是否具有指定名称的属性的的代码
2010/01/11 Javascript
JQuery里选择超链接的实现代码
2011/05/22 Javascript
JS中的hasOwnProperty()和isPrototypeOf()属性实例详解
2016/08/11 Javascript
AngularJs concepts详解及示例代码
2016/09/01 Javascript
javascript中活灵活现的Array对象详解
2016/11/30 Javascript
JS作用域深度解析
2016/12/29 Javascript
Node.js数据库操作之连接MySQL数据库(一)
2017/03/04 Javascript
实现两个文本框同时输入的实例
2017/09/25 Javascript
element-ui多文件上传的实现示例
2019/04/10 Javascript
[08:56]DOTA2-DPC中国联赛2月23日Recap集锦
2021/03/11 DOTA
Python基于回溯法子集树模板解决数字组合问题实例
2017/09/02 Python
1分钟快速生成用于网页内容提取的xslt
2018/02/23 Python
PyQt5每天必学之切换按钮
2020/08/20 Python
使用Python做垃圾分类的原理及实例代码附源码
2019/07/02 Python
python 将字符串中的数字相加求和的实现
2019/07/18 Python
Python 实现一个手机号码获取妹子名字的功能
2019/09/25 Python
Python socket实现的文件下载器功能示例
2019/11/15 Python
Python面向对象魔法方法和单例模块代码实例
2020/03/25 Python
python 多进程和协程配合使用写入数据
2020/10/30 Python
使用python爬取抖音app视频的实例代码
2020/12/01 Python
django使用多个数据库的方法实例
2021/03/04 Python
收藏!10个免费高清视频素材网站!【设计、视频剪辑必备】
2021/03/18 杂记
处理HTML5新标签的浏览器兼容版问题
2017/03/13 HTML / CSS
美国时尚在线:Showpo
2017/09/08 全球购物
绩效专员岗位职责
2013/12/02 职场文书
企业宣传方案
2014/03/04 职场文书
2014年团队工作总结
2014/11/24 职场文书
销售经理工作检讨书
2015/02/19 职场文书
创业计划书之闲置物品置换中心
2019/12/25 职场文书
PyTorch 如何检查模型梯度是否可导
2021/06/05 Python