美文网首页
图像处理实战-背景建模

图像处理实战-背景建模

作者: YvanYan | 来源:发表于2020-08-20 12:03 被阅读0次

    背景建模技术可以从静止的背景中提取出移动的前景。背景建模的方法有很多,本文使用的是混合高斯模型。

    **完整代码:https://github.com/YvanYan/image_processing/tree/master/bgfd
    **

    流程:
    1.读取视频图像
    2.创建混合高斯模型
    3.逐帧进行检测


    import cv2
    
    cap = cv2.VideoCapture('test.avi')
    kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3, 3))
    fgbg = cv2.createBackgroundSubtractorMOG2()
    
    while (True):
        ret, frame = cap.read()
        fgmask = fgbg.apply(frame)
    
        fgmask = cv2.morphologyEx(fgmask, cv2.MORPH_OPEN, kernel)
        cnts = cv2.findContours(fgmask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[1]
    
        for c in cnts:
            perimeter = cv2.arcLength(c, True)
            if perimeter > 188:
                x, y, w, h = cv2.boundingRect(c)
                cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
    
        cv2.imshow('frame', frame)
        cv2.imshow('fgmask', fgmask)
        k = cv2.waitKey(150)
        if k == 27:
            break
    
    cap.release()
    cv2.destroyAllWindows()
    
    • VideoCapture函数为读取视频,若VideoCapture(0)表示打开笔记本的内置摄像头。
    • cap.read()是按帧读取视频,返回值ret表示如果读取帧正确,则返回True,否则读取到文件结尾为False。frame是读取每一帧的图像,是一个三维矩阵。
    • createBackgroundSubtractorMOG2创建混合高斯模型用于背景建模。
    • fgbg.apply()具有三个输入参数(image,fmask, rate)。image为输入的源图,即为视频的每一帧framefmask为前景图。rate为学习率,值为[0,1],为0时表示背景不更新,为1时表示逐帧更新。默认为-1,即为算法自动更新。
    • k==27表示当按下退出键后,终止程序。
    result.png

    相关文章

      网友评论

          本文标题:图像处理实战-背景建模

          本文链接:https://www.haomeiwen.com/subject/rissjktx.html