用OpenCV怎样做检测动态物体的功能,思路是什么
Admin 2022-06-07 群英技术资讯 1475 次浏览
这篇文章给大家介绍了“用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()来控制时间变化,这会影响我们视频的帧率
这个方法的弊端是当环境光线亮度变化过大时,返回的轮廓会产生变化,导致程序判断整个屏幕都在运动,这点仍需改进。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要为大家详细介绍了Python和C语言如何利用栈的数据结构分别实现将十进制数转换成二进制数,文中的示例代码讲解详细,需要的可以参考一下
本文为大家重点介绍如何通过 python 编码来实现我们的接口测试以及通过Pycharm的实际应用编写一个简单接口测试,感兴趣的可以了解一下
这篇文章主要为大家介绍的是Pandas两种少用的读取文件方式:读取在线文件的数据和读取剪贴板的数据,感兴趣的小伙伴可以跟随小编一起学习一下
python执行系统命令的方法有哪些?一些新手对于python执行系统命令不是很了解,所以这篇文章就给大家介绍一下python执行系统命令的常见4种方法,感兴趣的朋友可以参考。
今天教大家怎么用Python实现自动提取并收集信息的功能,文中介绍的非常详细,有很多代码示例,对正在学习python的小伙伴们很有帮助,需要的朋友可以参考下
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008