文章目录
前言
帧间差法可以检测运动物体,通过摄像头获取连续的两帧或者三帧进行差值处理,像素变化较大的可以认为是运动的目标,变化小的可以认为是背景。这里提到摄像头,因为我们的项目没有摄像头,所以FPGA部分就不需要实现,但是后期会考虑加入摄像头。
一、帧间差算法
帧间差算法的核心是阈值的选择。如果阈值偏大,则变化较小的移动的物体就会被忽略,相应的运动较大的移动物体被保留下来;反之,如果阈值偏小,则可能变化较小的目标也被保留下来,会出现满屏的运动像素的现象。
二、Python实现帧差法
import cv2
import numpy as np
#图像灰度处理
def image_gray(image):
gray = np.dot(image[:, :, ...], [0.3, 0.59, 0.11])
return gray
#计算两张图像的差异,超过阈值设置像素值
def diff_method(frame1, frame2, value):
frame_diff = np.abs(frame1 - frame2)
return np.where(frame_diff >= value, 255, 0).astype(np.uint8)
cap = cv2.VideoCapture(0)#获取摄像头
ret, curr_frame = cap.read()#获取一帧
curr_frame = cv2.flip(curr_frame, 180)#图像水平翻转
curr_frame = image_gray(curr_frame)#图像灰度处理
while True:
ret, next_frame = cap.read()#获取当前帧
next_frame = cv2.flip(next_frame, 180)#图像翻转
if ret:
next_frame = image_gray(next_frame)#下一帧灰度处理
frame_diff = diff_method(curr_frame, next_frame, 80)#上一帧和当前帧进行差值计算
cv2.imshow('video', frame_diff)#显示
k = cv2.waitKey(30) & 0xff
if k == 27:#按下按键esc
break
else:
break
curr_frame = next_frame
cv2.destroyAllWindows()
cap.release()
三、实现效果
帧差法
总结
到此处,《基于MATLAB与FPGA的图像处理教程》图像二值化处理章节就结束了。下一部分图像锐化处理,让你的图像更突出。