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

图像处理实战-背景建模

作者: 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