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中的lstrip()方法使用简介
May 19 Python
快速入手Python字符编码
Aug 03 Python
目前最全的python的就业方向
Jun 05 Python
如何用Python实现简单的Markdown转换器
Jul 16 Python
Python简直是万能的,这5大主要用途你一定要知道!(推荐)
Apr 03 Python
django框架实现一次性上传多个文件功能示例【批量上传】
Jun 19 Python
Python with语句和过程抽取思想
Dec 23 Python
Python 模拟生成动态产生验证码图片的方法
Feb 01 Python
django 取消csrf限制的实例
Mar 13 Python
Pycharm2020.1安装无法启动问题即设置中文插件的方法
Aug 07 Python
python time()的实例用法
Nov 03 Python
python实现控制台输出颜色
Mar 02 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摘要生成函数(无乱码)
2012/02/04 PHP
php防止站外远程提交表单的方法
2014/10/20 PHP
php实现ip白名单黑名单功能
2015/03/12 PHP
PHP基于正则批量替换Img中src内容实现获取缩略图的功能示例
2017/06/07 PHP
浅谈Laravel中的一个后期静态绑定
2017/08/11 PHP
PhpStorm 如何优雅的调试Hyperf的方法步骤
2019/11/24 PHP
Javascript var变量隐式声明方法
2009/10/19 Javascript
JavaScrip单线程引擎工作原理分析
2010/09/04 Javascript
一个javascript图片阅览组件
2010/11/09 Javascript
js 通用javascript函数库整理
2011/08/14 Javascript
jquery 关于event.target使用的几点说明介绍
2013/04/26 Javascript
获取表单控件原始(初始)值的方法
2013/08/21 Javascript
JS获取及设置TextArea或input文本框选择文本位置的方法
2015/03/24 Javascript
jQuery Mobile页面返回不需要重新get
2016/04/26 Javascript
Angular懒加载机制刷新后无法回退的快速解决方法
2016/08/30 Javascript
深入理解Vue.js源码之事件机制
2017/09/27 Javascript
详述 Sublime Text 打开 GBK 格式中文乱码的解决方法
2017/10/26 Javascript
vue ssr 指南详读
2018/06/29 Javascript
vue中的v-model原理,与组件自定义v-model详解
2020/08/04 Javascript
简单文件操作python 修改文件指定行的方法
2013/05/15 Python
Python3实现连接SQLite数据库的方法
2014/08/23 Python
Python格式化日期时间操作示例
2018/06/28 Python
对python文件读写的缓冲行为详解
2019/02/13 Python
python给指定csv表格中的联系人群发邮件(带附件的邮件)
2019/12/31 Python
Python如何把多个PDF文件合并代码实例
2020/02/13 Python
python str字符串转uuid实例
2020/03/03 Python
用python制作个音乐下载器
2021/01/30 Python
绝对令人的惊叹的CSS3折叠效果(3D效果)整理
2012/12/30 HTML / CSS
css3中新增的样式使用示例附效果图
2014/08/19 HTML / CSS
北卡罗来纳州豪华家具和家居装饰店:Carolina Rustica
2018/10/30 全球购物
个人自我鉴定范文
2013/10/04 职场文书
主题班会演讲稿
2014/05/22 职场文书
2015年物资管理工作总结
2015/05/20 职场文书
查看nginx配置文件路径和资源文件路径的方法
2021/03/31 Servers
js前端面试常见浏览器缓存强缓存及协商缓存实例
2022/06/21 Javascript
Python 操作pdf pdfplumber读取PDF写入Exce
2022/08/14 Python