视频加载失败

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

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'):
break
cap.release()
cv2.destroyAllWindows()

1.png
1.png

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'):
break
cap.release()
cv2.destroyAllWindows()

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
【算法/图像处理】运动检测--帧间差分法
https://rehtt.com/posts/233/
作者
Rehtt
发布于
2020-07-24
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
Rehtt
Hello, I'm Rehtt.
公告
欢迎来到我的博客!
分类
标签
最新动态
站点统计
文章
150
分类
17
标签
73
总字数
67,772
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
Local
博客版本
Firefly v6.16.8
文章许可
CC BY-NC-SA 4.0
文章目录