【算法/图像处理】运动检测--帧间差分法
693 字
3 分钟
【算法/图像处理】运动检测--帧间差分法

0x00
帧间差分法顾名思义,就是将视频的前后帧对应的像素点进行差运算得出差值。
0x01 原理
首先将视频每帧画面转为二值图(即只有“白”与“黑”两种颜色的图),再将前后帧进行差运算。当前后帧的同一个像素点的差值不为零,并且差值的绝对值超过设定的阈值时,就可以判断画面发生了移动。
0x02 优点
- 算法简单,程序实现的难度不高
- 对光线的变化感知不明显(只要光线变化不是太大,二值化后的图像基本相同)
- 能够适应各种动态变化的图像,稳健性较强
0x03 缺点
- 对于快速移动的物体,画面容易变“糊”,过快的话甚至会被认为是两个物体
- 对于慢速移动的物体,由于速度过慢导致前后帧几乎重合,而检测不到物体
- 检测出的物体有“空洞”,只能检测出移动物体的外边,而且检测出来的外边要比物体实际的轮廓大
0x10 相邻帧间差分法
相邻帧间差分法就是二帧法,对相邻的两帧图像做差运算,取差值的绝对值构成移动物体。
其优点是实时性高,运算快速。但光照突变的情况下效果不好。
0x11 代码实现
使用 opencv-python进行演示
import cv2
#上一帧lastFram = None#我这的视频源是使用网络摄像头cap = cv2.VideoCapture("rtsp://admin:admin@192.168.31.89:8445/live")while (cap.isOpened()): #逐帧读取摄像头画面 ret, fram = cap.read() #转为灰度图 fram = cv2.cvtColor(fram, cv2.COLOR_BGR2GRAY) #转为二值图 fram = cv2.threshold(fram, 25, 255, cv2.THRESH_BINARY)[1] #初始帧 if lastFram is None: lastFram = fram continue #将上一帧与当前帧做差运算 frameDelta = cv2.absdiff(lastFram, fram) #当前帧设为上一帧 lastFram = fram.copy() #显示 cv2.imshow("f", fram) if cv2.waitKey(1) & 0xFF == ord('q'): breakcap.release()cv2.destroyAllWindows()
0x20 三帧法
三帧就是在二帧让的基础上,进行与运算。
假设有A、B、C三帧,AB做差运算,BC做差运算,再将两个差运算做与运算。
相比二帧更适用于移动较快的情况。
0x21 程序实现
import cv2
#A帧aFram = None#B帧bFram = None#我这的视频源是使用网络摄像头cap = cv2.VideoCapture("rtsp://admin:admin@192.168.31.89:8445/live")while (cap.isOpened()): #逐帧读取摄像头画面 ret, fram = cap.read() #转为灰度图 fram = cv2.cvtColor(fram, cv2.COLOR_BGR2GRAY) #转为二值图 fram = cv2.threshold(fram, 25, 255, cv2.THRESH_BINARY)[1] #初始帧 if bFram is None: if aFram is None: aFram = fram.copy() else: bFram = fram.copy() global abFram abFram = cv2.absdiff(aFram, bFram) continue
bcFram = cv2.absdiff(bFram, fram) #与运算 thresh = cv2.bitwise_and(adFram,bcFram)
abFram = bcFram.copy() aFram = bFram.copy() bFram = fram.copy() #显示 cv2.imshow("f", thresh) if cv2.waitKey(1) & 0xFF == ord('q'): breakcap.release()cv2.destroyAllWindows()支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!
相关文章智能推荐
1
【算法】动态规划
算法2021-04-16
2
【Golang】使用gocv库编写三帧法
Golang笔记2021-08-04
3
【杂项】使用gocv库实现视频转终端字符画
Golang笔记2021-08-12
4
【NFC】恢复被写入cpu卡SAK的CUID魔术卡
杂项2026-05-10
5
【脚本】在jetson nano上使用摄像头分段录像并开启端口推流
杂项2026-01-08
随机文章随机推荐















加载更多…