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