1. 光流法
光流:由于目标对象或者摄像机的移动造成的图像对象在连续两帧图像中的移动被称为光流。它是一个 2D 向量场,可以用来显示一个点从第一帧图像到第二 帧图像之间的移动。
光流是基于一下假设的:
- 在连续的两帧图像之间(目标对象的)像素的灰度值不改变。(/亮度不变)
- 相邻的像素具有相同的运动 。
结果:提取运动的物体
import cv2
import numpy as np
cap = cv2.VideoCapture("vtest.avi")
# 取出视频的第一帧
ret, frame1 = cap.read()
prvs = cv2.cvtColor(frame1,cv2.COLOR_BGR2GRAY)
hsv = np.zeros_like(frame1) # 为绘制创建掩码图片
hsv[...,1] = 255
while(1):
ret, frame2 = cap.read()
next = cv2.cvtColor(frame2,cv2.COLOR_BGR2GRAY) #转为灰度图
flow = cv2.calcOpticalFlowFarneback(prvs, next, None