博主是opencv初学者,最近研究动态目标识别,然后利用当前帧和起始背景帧的灰度值差,简单实现了动态目标识别跟踪,现在将这个方法分享给大家。
本方法的主要思想在于,在求得两帧的灰度值差后,利用threshold函数,将灰度差值大于阈值的像素一律改为1,小于阈值的改为0。这样得到一个0和1的矩阵,再将此矩阵与当前帧进行点乘,就可将移动的物体提取出来。
需要指出的是,本程序目前只能初步实现此功能,还有很多地方需要完善、优化。
欢迎私信,交流。
import cv2
import numpy as np
import time
camera=cv2.VideoCapture(0)
lastframe=None
while True:
ret,frame = camera.read()
if not ret:
break
gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY) #灰度化
gray=cv2.GaussianBlur(gray,(21,21),0) #高斯滤波
if lastframe is None:
lastframe=gray
continue
gray_diff = cv2.absdiff(lastframe,gray) #求差绝对值
gray_diff=cv2.threshold(gray_diff,30,1,cv2.THRESH_BINARY)[1]#差值二值化
gray_new=np.multiply(gray_diff,gray)#矩阵点乘
gray2=cv2.convertScaleAbs(gray_new,0,1,0)#设置图像深度