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实现的下载8000首儿歌的代码分享
Nov 21 Python
Python中使用md5sum检查目录中相同文件代码分享
Feb 02 Python
Python信息抽取之乱码解决办法
Jun 29 Python
python数据结构之链表详解
Sep 12 Python
可能是最全面的 Python 字符串拼接总结【收藏】
Jul 09 Python
Python3匿名函数用法示例
Jul 25 Python
华为2019校招笔试题之处理字符串(python版)
Jun 25 Python
python pygame实现球球大作战
Nov 25 Python
Pandas时间序列:重采样及频率转换方式
Dec 26 Python
解决python对齐错误的方法
Jul 16 Python
python爬取代理IP并进行有效的IP测试实现
Oct 09 Python
python中mongodb包操作数据库
Apr 19 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向js函数传参的几种方法
2014/08/10 PHP
PHP如何将log信息写入服务器中的log文件
2015/07/29 PHP
node.js中的console.timeEnd方法使用说明
2014/12/09 Javascript
轻量级网页遮罩层jQuery插件用法实例
2015/07/31 Javascript
巧方法 JavaScript获取超链接的绝对URL地址
2016/06/14 Javascript
jquery表单提交带错误信息提示效果
2017/03/09 Javascript
vue实现全选、反选功能
2020/11/17 Javascript
JavaScript实现带有子菜单和控件的slider轮播图效果
2017/11/01 Javascript
微信小程序实现天气预报功能
2018/07/18 Javascript
vue实现分页栏效果
2019/06/28 Javascript
深入分析jQuery.one() 函数
2020/06/03 jQuery
简单了解vue 插值表达式Mustache
2020/07/22 Javascript
vue中路由跳转不计入history的操作
2020/09/21 Javascript
[53:13]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS LGD-GAMING
2014/05/22 DOTA
跟老齐学Python之字典,你还记得吗?
2014/09/20 Python
Python装饰器decorator用法实例
2014/11/10 Python
python操作字典类型的常用方法(推荐)
2016/05/16 Python
python爬虫入门教程--正则表达式完全指南(五)
2017/05/25 Python
Python网络爬虫中的同步与异步示例详解
2018/02/03 Python
Python计算开方、立方、圆周率,精确到小数点后任意位的方法
2018/07/17 Python
使用python对文件中的数值进行累加的实例
2018/11/28 Python
Python 列表去重去除空字符的例子
2019/07/20 Python
Django更新models数据库结构步骤
2020/04/01 Python
Django中template for如何使用方法
2021/01/31 Python
Html5适配iphoneX刘海屏的简单实现
2019/04/09 HTML / CSS
美国演唱会订票网站:Ticketmaster美国
2017/10/05 全球购物
自荐信格式范文
2013/10/07 职场文书
保险专业大专生求职信
2013/10/26 职场文书
《猴子种树》教学反思
2014/02/14 职场文书
三八妇女节活动总结
2014/05/04 职场文书
优秀班主任申报材料
2014/12/16 职场文书
活动费用申请报告
2015/05/15 职场文书
Python离线安装openpyxl模块的步骤
2021/03/30 Python
解决numpy和torch数据类型转化的问题
2021/05/23 Python
Python爬虫之用Xpath获取关键标签实现自动评论盖楼抽奖(二)
2021/06/07 Python
win7配置本地ftp服务器的图文教程
2022/08/05 Servers