opencv检测动态物体的实现

 更新时间:2021年07月19日 15:51:11   作者:滑稽研究所  
本文主要介绍了opencv检测动态物体的实现,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧

之前我在超市看到当有物体经过时,监控的屏幕边缘会出现绿框。感觉蛮有意思的。来用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()

  静:

在这里插入图片描述

  动:

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

在这里插入图片描述

在这里插入图片描述

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

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

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

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

相关文章

  • python @property的用法及含义全面解析

    python @property的用法及含义全面解析

    下面小编就为大家分享一篇python @property的用法及含义全面解析,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-02-02
  • PyTorch数据读取的实现示例

    PyTorch数据读取的实现示例

    这篇文章主要介绍了PyTorch数据读取的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • python连接数据库后通过占位符添加数据

    python连接数据库后通过占位符添加数据

    在pymysql中支持对占位符的处理,开发者需要在SQL中使用“%”定义占位符,在使用excute()方法执行时对占位符的数据进行填充即可,本文给大家介绍python连接数据库后通过占位符添加数据的方法,需要的朋友参考下吧
    2021-12-12
  • python通过socket实现多个连接并实现ssh功能详解

    python通过socket实现多个连接并实现ssh功能详解

    这篇文章主要介绍了python通过socket实现多个连接并实现ssh功能详解,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • python 实现按对象传值

    python 实现按对象传值

    今天小编就为大家分享一篇python 实现按对象传值,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • Python JMESPath库轻松操作JSON进行数据查询方法实例

    Python JMESPath库轻松操作JSON进行数据查询方法实例

    这篇文章主要为大家介绍了Python JMESPath库轻松操作JSON方法实例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • Django Admin实现三级联动的示例代码(省市区)

    Django Admin实现三级联动的示例代码(省市区)

    多级菜单在很多上面都有应用,这篇文章主要介绍了Django Admin实现三级联动(省市区),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • python将xml xsl文件生成html文件存储示例讲解

    python将xml xsl文件生成html文件存储示例讲解

    这篇文章主要介绍了python将xml、xsl文件转成html文件存储方法,大家参考使用吧
    2013-12-12
  • PyQt5中向单元格添加控件的方法示例

    PyQt5中向单元格添加控件的方法示例

    这篇文章主要介绍了PyQt5中向单元格添加控件的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • 五个有趣的Python整蛊小程序合集

    五个有趣的Python整蛊小程序合集

    Python 能做很多无聊,但有意思的事情。本文为大家精心准备了五个整蛊朋友的小程序,文中的示例代码讲解详细,感兴趣的小伙伴快动手试一试
    2022-04-04

最新评论