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

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

#!/usr/bin/env python
#__*__coding=utf-8__*__
"""
利用侦差法检测背景

"""
import cv2
import 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"):
        break

cv2.destroyAllWindows()
camera.release()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值