帧间差和背景建模简单实现

1、帧间差法:

基本思想:检测出相邻两帧图像中发生变化的区域。该方法是用图像序列连续两帧图像进行差分,然后二值化灰度图像来提取目标运动信息。

import cv2
def absdiff_demo(image1,image2,sThre):
    gray_image_1 = cv2.cvtColor(image1,cv2.COLOR_BGR2GRAY)
    gray_image_1 = cv2.GaussianBlur(gray_image_1,(3,3),0)
    gray_image_2 = cv2.cvtColor(image2, cv2.COLOR_BGR2GRAY)
    gray_image_2 = cv2.GaussianBlur(gray_image_2, (3, 3), 0)
    # cv2.absdiff(frame1,frame2)
    d_frame = cv2.absdiff(gray_image_1,gray_image_2)
    #threshold(src,thresh,maxvalue,type),大于thresh的像素将会设置为255
    ret,d_frame = cv2.threshold(d_frame,sThre,255,cv2.THRESH_BINARY)
    return d_frame
cap = cv2.VideoCapture(0)
sThre = 20
i = 0
while(True):
    ret,frame = cap.read()
    ret_2,frame_2 = cap.read()
    d_frame = absdiff_demo(frame,frame_2,sThre)
    cv2.imshow("absdiff",d_frame)
    k = cv2.waitKey(100) & 0xff
print(i)
cap.release()
cv2.destroyAllWindows()

2、背景建模:

在opencv3中已经删除了cv2.createBackgroundSubtractorMOG()和cv2.createBackgroundSubtractorGMG(),相对于前者而言,cv2.createBackgroundSubtractorMOG2()可以更好地将物体的阴影检测出来并当作背景处理

import numpy as np
import cv2
cap = cv2.VideoCapture(0)
#fgbg(foreground background)
fgbg = cv2.createBackgroundSubtractorMOG2()
while(1):
    ret,frame = cap.read()
    # fgmask forgeground前景掩模,通过apply方法得到前景图像
    fgmask = fgbg.apply(frame)
    cv2.imshow('frame',fgmask)
    k = cv2.waitKey(30) & 0xff
    if k == 27:
        break
cap.release()
cv2.destroyAllWindows()

帧间差参考连接

连接1:https://blog.csdn.net/weixin_41987641/article/details/81910450

连接2:https://blog.csdn.net/tezhongjunxue/article/details/14492101

背景建模参考连接

连接:https://blog.csdn.net/u014737138/article/details/80389977

猜你喜欢

转载自blog.csdn.net/Li_haiyu/article/details/86432853