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()来控制时间变化,这会影响我们视频的帧率
这个方法的弊端是当环境光线亮度变化过大时,返回的轮廓会产生变化,导致程序判断整个屏幕都在运动,这点仍需改进。
敢达决战官方正版 安卓版v6.7.9
下载敢达决战 安卓版v6.7.9
下载像素火影骨架佐助 (Perseverance Fire Shadow)手机版v1.16
下载要塞英雄 安卓版v33.20.0-39082670-Android
下载梦想城镇vivo最新版本 安卓版v12.0.1
梦想城镇vivo版是这款卡通风模拟经营类手游的渠道服版本,玩
怦然心动的瞬间 安卓版v1.0
怦然心动的瞬间是一款真人向的恋爱互动游戏,在游戏中玩家将扮演
曼尼汉堡店游戏 安卓版v1.0.3
曼尼汉堡店是一款非常好玩的精品恐怖类型冒险游戏,在这款游戏中
现代总统模拟器去广告版 安卓版v1.0.46
现代总统模拟器是一款休闲养成类游戏,可能对于不少的玩家来说都
现代总统模拟器付费完整版 安卓版v1.0.46
现代总统模拟器高级版在商店是需要付费的,相对于普通版本,高级