目标跟踪(1)——侦差法代码解读

来源:互联网 发布:淘宝皮草品牌 编辑:程序博客网 时间:2024/04/30 03:12

《OpenCV 3计算机视觉——python语言实现(原书第2版)》
第八章目标跟踪
|______8.1检测移动的目标
本节只是对书中代码进行详细解读

#!/usr/bin/env python#__*__coding=utf-8__*__"""利用侦差法检测背景"""import cv2import numpy as np#获取摄像头图像camera = cv2.VideoCapture(0)#获取常用的结构元素的形状 椭圆>>长轴为9,短轴为4#参数介绍MORPH_RECT(矩形), MORPH_ELLIPSE(椭圆),MORPH_CROSS(十字形)es = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(9,4))#定义内核大小及元素kernel = np.ones((5,5),np.uint8)background = None#进入视频流处理while(True):    #获取图像    ret,frame = camera.read()    if background is None:        #背景灰度化        background = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)        #背景高斯滤波        background = cv2.GaussianBlur(background,(21,21),0)        continue    #灰度化    gray_fram = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)    #高斯模糊    gray_fram = cv2.GaussianBlur(gray_fram,(21,21),0)    #与背景做侦差(取差值得绝对值)    diff = cv2.absdiff(background,gray_fram)    #侦差结果二值化    diff = cv2.threshold(diff,25,255,cv2.THRESH_BINARY)[1]    #侦差结果膨胀处理    diff = cv2.dilate(diff,es,iterations=2)    #对侦差结果进行找轮廓    image,cnts,hierarchy = cv2.findContours(diff.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)    #如果轮廓变化大,则画矩形,认为有变化    for c in cnts:        if cv2.contourArea(c) < 1500:            continue        (x,y,w,h) = cv2.boundingRect(c)        cv2.rectangle(frame,(x,y),(x+w,y+h),(0,255,0),2)    cv2.imshow("contours",frame)    cv2.imshow("diff",diff)    if cv2.waitKey(100) & 0xff == ord("q"):        breakcv2.destroyAllWindows()camera.release()
0 0
原创粉丝点击