使用python与opencv怎么实现一个运动检测器功能?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
Python主要应用于:1、Web开发;2、数据科学研究;3、网络爬虫;4、嵌入式应用开发;5、游戏开发;6、桌面应用开发。
import pandas firstframe = None status = [None,None] df = pandas.DataFrame(columns=["start","end"]) cap = cv2.VideoCapture(1) while True: check,colorframe = cap.read() status = 0 gray = cv2.cvtColor(colorframe,cv2.COLOR_BGR2GRAY) gray = cv2.GaussianBlur(gray,(21,21),0) #高斯模糊去除噪声 if firstframe is None: firstframe = gray continue #捕获第一个灰度帧 得到第一帧后不进行后续处理 delta_frame = cv2.absdiff(firstframe,gray) # ,我们需要找出第一帧和当前帧之间的区别。因此,我们使用absdiff函数并将得到的结果称为delta帧。对于我们的用例来说,仅仅找到一个差异是不够的,所以我们需要定义一个像素阈值,它可以被视为真实的对象。我们可以选择30像素作为标准阈值,并将标准阈值的颜色定义为白色(颜色代码:255). 二元阈值函数THRESH_BINARY返回一个元组值,其中只有第二项([0]是第一项,[1]是第二项)包含生成的阈值帧。二元阈值函数用于处理含有2个离散值的非连续函数:如0或1。如果摄影机前面没有对象,我们将当前帧的状态视为0;如果摄影机前面存在对象,则将当前帧的状态视为1。 thresh_frame = cv2.threshold(delta_frame,30,255,cv2.THRESH_BINARY)[1] thresh_frame = cv2.dilate(thresh_frame,None,iterations=3) # 在膨胀函数Dilate中,我们可以通过设置迭代次数来设置平滑度。迭代次数越多,平滑度越高,处理时间也就越长。因此,建议保持标准化设置为3。膨胀函数中的“None”参数表示我们的应用中不需要元素结构。 #声明元组的语法 (cnts,_) (cnts,_) = cv2.findContours(thresh_frame.copy(),cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE) for contours in cnts : if cv2.contourArea(contours) < 10000: continue if cv2.contourArea(contours) < 20000: status = 1 (x,y,w,h) = cv2.boundingRect(contours) cv2.rectangle(colorframe,(x,y),(x+w,y+h),(0,0,255),3) cv2.imshow("cc",colorframe) key = cv2.waitKey(1) if key == ord('q'): break
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。