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基于phantomjs实现导入图片
May 13 Python
在NumPy中创建空数组/矩阵的方法
Jun 15 Python
Python框架Flask的基本数据库操作方法分析
Jul 13 Python
Python实现按逗号分隔列表的方法
Oct 23 Python
详解python使用pip安装第三方库(工具包)速度慢、超时、失败的解决方案
Dec 02 Python
Python装饰器语法糖
Jan 02 Python
基于python实现从尾到头打印链表
Nov 02 Python
Python接口测试数据库封装实现原理
May 09 Python
python和C++共享内存传输图像的示例
Oct 27 Python
详解Django自定义图片和文件上传路径(upload_to)的2种方式
Dec 01 Python
pandas 数据类型转换的实现
Dec 29 Python
PyQt5爬取12306车票信息程序的实现
May 14 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
浅谈web上存漏洞及原理分析、防范方法(文件名检测漏洞)
2013/06/29 PHP
PHP实现通过URL提取根域名
2016/03/31 PHP
php 计算两个时间相差的天数、小时数、分钟数、秒数详解及实例代码
2016/11/09 PHP
laravel如何开启跨域功能示例详解
2017/08/31 PHP
基于jquery的关于动态创建DOM元素的问题
2010/12/24 Javascript
按给定几率进行随机抽取的js代码
2010/12/28 Javascript
纯文字版返回顶端的js代码
2013/08/01 Javascript
基于jquery异步传输json数据格式实例代码
2013/11/23 Javascript
JavaScript中提前声明变量或函数例子
2014/11/12 Javascript
JavaScript在浏览器标题栏上显示当前日期和时间的方法
2015/03/19 Javascript
解决angular的$http.post()提交数据时后台接收不到参数值问题的方法
2015/12/10 Javascript
js HTML5上传示例代码完整版
2016/10/10 Javascript
nodejs multer实现文件上传与下载
2017/05/10 NodeJs
基于AngularJS实现表单验证功能
2017/07/28 Javascript
vue2+el-menu实现路由跳转及当前项的设置方法实例
2017/11/07 Javascript
解决vue中修改export default中脚本报一大堆错的问题
2018/08/27 Javascript
JavaScript函数的特性与应用实践深入详解
2018/12/30 Javascript
Vue项目环境搭建详细总结
2019/09/26 Javascript
jquery实现上传文件进度条
2020/03/26 jQuery
vue实现购物车加减
2020/05/30 Javascript
JS常见错误(Error)及处理方案详解
2020/07/02 Javascript
vue-cli3项目配置eslint代码规范的完整步骤
2020/09/10 Javascript
详解vue中使用transition和animation的实例代码
2020/12/12 Vue.js
[01:41]DOTA2超级联赛专访YYF 称一辈子难忘TI2
2013/05/28 DOTA
python使用zip将list转为json的方法
2018/12/31 Python
python多线程抽象编程模型详解
2019/03/20 Python
Python循环中else,break和continue的用法实例详解
2019/07/11 Python
大学生自我鉴定范文
2013/12/28 职场文书
酒店总经理欢迎词
2014/01/15 职场文书
展会邀请函范文
2014/01/26 职场文书
党的群众路线教育实践活动心得体会900字
2014/03/07 职场文书
护理专业学生职业生涯规划范文
2014/03/11 职场文书
合作投资意向书
2014/04/01 职场文书
庆祝教师节演讲稿
2014/09/03 职场文书
Spring Boot DevTools 全局配置学习指南
2022/03/31 Java/Android
JS函数式编程实现XDM一
2022/06/16 Javascript