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获取GY-85九轴模块信息示例
Dec 05 Python
将Python中的数据存储到系统本地的简单方法
Apr 11 Python
JPype实现在python中调用JAVA的实例
Jul 19 Python
Python离线安装PIL 模块的方法
Jan 08 Python
对python特殊函数 __call__()的使用详解
Jul 02 Python
python中struct模块之字节型数据的处理方法
Aug 27 Python
Django 解决上传文件时,request.FILES为空的问题
May 20 Python
keras读取训练好的模型参数并把参数赋值给其它模型详解
Jun 15 Python
Python自定义sorted排序实现方法详解
Sep 18 Python
python调用摄像头的示例代码
Sep 28 Python
利用Python实现Picgo图床工具
Nov 23 Python
Python必备技巧之函数的使用详解
Apr 04 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 session
2013/10/28 PHP
php同时使用session和cookie来保存用户登录信息的实现代码
2016/05/13 PHP
PHP编程计算日期间隔天数的方法
2017/04/26 PHP
Aster vs Newbee BO5 第二场2.19
2021/03/10 DOTA
使用JQUERY Tabs插件宿主IFRAMES
2010/01/01 Javascript
网页实时显示服务器时间和javscript自运行时钟
2014/06/09 Javascript
jQuery中change事件用法实例
2014/12/26 Javascript
js实现touch移动触屏滑动事件
2015/04/17 Javascript
无需 Flash 使用 jQuery 复制文字到剪贴板
2016/04/26 Javascript
快速使用Bootstrap搭建传送带
2016/05/06 Javascript
20分钟成功编写bootstrap响应式页面 就这么简单
2016/05/12 Javascript
Backbone View 之间通信的三种方式
2016/08/09 Javascript
利用JS提交表单的几种方法和验证(必看篇)
2016/09/17 Javascript
jQuery中的on与bind绑定事件区别实例详解
2017/02/28 Javascript
jQuery Plupload上传插件的使用
2017/04/19 jQuery
基于Jquery Ajax type的4种类型(详解)
2017/08/02 jQuery
浅谈React的最大亮点之虚拟DOM
2018/05/29 Javascript
JavaScript中为事件指定处理程序的五种方式分析
2018/07/27 Javascript
[01:45]DOTA2新英雄“神谕者”全方位展示
2014/11/21 DOTA
[09:34]2018DOTA2国际邀请赛寻真——永不放弃的iG
2018/08/14 DOTA
合并Excel工作薄中成绩表的VBA代码,非常适合教育一线的朋友
2009/04/09 Python
python3基于OpenCV实现证件照背景替换
2018/07/18 Python
python使用tkinter库实现五子棋游戏
2019/06/18 Python
Java文件与类动手动脑实例详解
2019/11/10 Python
Python通过TensorFLow进行线性模型训练原理与实现方法详解
2020/01/15 Python
在Keras中利用np.random.shuffle()打乱数据集实例
2020/06/15 Python
Restful_framework视图组件代码实例解析
2020/11/17 Python
全天然狗零食:Best Bully Sticks
2016/09/22 全球购物
C#可否对内存进行直接的操作
2015/02/26 面试题
离职证明范本(5篇)
2014/09/19 职场文书
领导班子党的群众路线对照检查材料
2014/09/25 职场文书
大学感恩节活动总结
2015/05/05 职场文书
2015年车间安全管理工作总结
2015/05/13 职场文书
律政俏佳人观后感
2015/06/09 职场文书
2015年清剿火患专项行动工作总结
2015/07/27 职场文书
运动会广播稿100字
2015/08/19 职场文书