zoukankan      html  css  js  c++  java
  • 12 单帧差法

    优点:

    实时性

    缺点:

    1、运动物体如果过大,且颜色一致,则会造成运动物体中空的现象

    2、如果光照变化强烈,也不适合该算法

    #!/usr/bin/env python
    #coding=utf-8
    """
    利用侦差法检测背景   阴影如何处理? 第一帧不能有运动物体?
    
    """
    import cv2
    import numpy as np
    
    #1.获取摄像头图像
    camera = cv2.VideoCapture('people.avi')
    
    #2. 获取常用的结构元素的形状 椭圆>>长轴为9,短轴为4
    #参数介绍MORPH_RECT(矩形), MORPH_ELLIPSE(椭圆),MORPH_CROSS(十字形)
    es = cv2.getStructuringElement(cv2.MORPH_CROSS,(9,4))
    
    #3. 定义内核大小及元素
    kernel = np.ones((5,5),np.uint8)
    
    background = None
    
    #4. 进入视频流处理
    while(True):
    
        #5. 获取图像
        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)
    
    
        #10.与背景做侦差(取差值得绝对值)
        diff = cv2.absdiff(background,gray_fram)
    
        #11. 侦差结果二值化
        diff = cv2.threshold(diff,25,255,cv2.THRESH_BINARY)[1]
    
        #12. 侦差结果膨胀处理
        diff = cv2.dilate(diff,es,iterations=2)
        #diff = cv2.morphologyEx(diff, cv2.MORPH_, kernel)
    
        #13.对侦差结果进行找轮廓   白色斑点的轮廓
        image,cnts,hierarchy = cv2.findContours(diff.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
    
        #14.如果轮廓变化大,则画矩形,认为有变化
        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()

        

  • 相关阅读:
    mvn打包不执行测试
    sprngmvc静态资源
    java.lang.NoSuchMethodError: java.util.Map.putIfAbsent(Ljava/lang/Object;Ljava/lang/Object;)Ljava/la
    Lombok annotation handler class lombok.javac.handlers.HandleData failed on G
    linux 一些命令(2)
    linux 空间释放,mysql数据库空间释放
    mysql 日志清理
    idea svn performing vcs refresh 很长时间
    装饰页面decorators.xml
    拦截器的使用,配置手机浏览器访问的h5页面
  • 原文地址:https://www.cnblogs.com/venicid/p/8005830.html
Copyright © 2011-2022 走看看