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实现一次创建多级目录的方法
May 15 Python
python 多线程串行和并行的实例
Feb 22 Python
不到40行代码用Python实现一个简单的推荐系统
May 10 Python
Python2与Python3的区别点整理
Dec 12 Python
python集合删除多种方法详解
Feb 10 Python
JetBrains PyCharm(Community版本)的下载、安装和初步使用图文教程详解
Mar 19 Python
Django windows使用Apache实现部署流程解析
Oct 12 Python
python 爬虫基本使用——统计杭电oj题目正确率并排序
Oct 26 Python
python产生模拟数据faker库的使用详解
Nov 04 Python
解决python存数据库速度太慢的问题
Apr 23 Python
Python-typing: 类型标注与支持 Any类型详解
May 10 Python
自动在Windows中运行Python脚本并定时触发功能实现
Sep 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 url地址栏传中文乱码解决方法集合
2010/06/25 PHP
PHP导出MySQL数据到Excel文件(fputcsv)
2011/07/03 PHP
php 删除目录下N分钟前创建的所有文件的实现代码
2013/08/10 PHP
PHP在引号前面添加反斜杠(PHP去除反斜杠)
2013/09/28 PHP
PHP中预定义的6种接口介绍
2015/05/12 PHP
php爬取天猫和淘宝商品数据
2018/02/23 PHP
解决thinkphp5未定义变量会抛出异常,页面错误,请稍后再试的问题
2019/10/16 PHP
JavaScript Date对象使用总结
2009/05/14 Javascript
Jquery Ajax学习实例3 向WebService发出请求,调用方法返回数据
2010/03/16 Javascript
JS this作用域以及GET传输值过长的问题解决方法
2013/08/06 Javascript
javascript计时器事件使用详解
2014/01/07 Javascript
js分页代码分享
2014/04/28 Javascript
JS 对象属性相关(检查属性、枚举属性等)
2015/04/05 Javascript
JS+DIV+CSS实现的经典标签切换效果代码
2015/09/14 Javascript
学习JavaScript正则表达式
2015/11/13 Javascript
轻松实现javascript图片轮播特效
2016/01/13 Javascript
jQuery查找节点方法完整实例
2016/09/13 Javascript
JavaScript方法_动力节点Java学院整理
2017/06/28 Javascript
微信小程序 跳转传递数据的实例
2017/07/06 Javascript
Vue.js仿微信聊天窗口展示组件功能
2017/08/11 Javascript
详解如何在Node.js的httpServer中接收前端发送的arraybuffer数据
2018/11/11 Javascript
Vue使用lodop实现打印小结
2019/07/06 Javascript
压缩Vue.js打包后的体积方法总结(Vue.js打包后体积过大问题)
2020/02/03 Javascript
Vue父子之间值传递的实例教程
2020/07/02 Javascript
Vue实现小购物车功能
2020/12/21 Vue.js
Python内置模块turtle绘图详解
2017/12/09 Python
Python List cmp()知识点总结
2019/02/18 Python
详解python中的线程与线程池
2019/05/10 Python
阿迪达斯希腊官方网上商店:adidas希腊
2019/04/06 全球购物
Java中实现多态的机制
2015/08/09 面试题
党建工作经验交流材料
2014/05/25 职场文书
党风廉政建设调研报告
2015/01/01 职场文书
冰峪沟导游词
2015/02/09 职场文书
音乐教师求职信范文
2015/03/20 职场文书
springboot集成springCloud中gateway时启动报错的解决
2021/07/16 Java/Android
利用nginx搭建RTMP视频点播、直播、HLS服务器
2022/05/25 Servers