使用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
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注创新互联行业资讯频道,感谢您对创新互联网站建设公司,的支持。