帧间差分法python,

  帧间差分法python,

  0x00

  帧间差分法,顾名思义就是计算视频前后帧对应像素的差值。

  0x01原理

  首先将视频逐帧转换成二值图表,即只有“白”和“黑”两种颜色的图表,然后对前后帧进行差分运算。当当前帧中同一像素的差值不为零,并且差值的绝对值超过设定的阈值时,可以判断图片发生了移动。

  0x02的优点是算法简单,程序实现难度低。

  不能清晰识别光线变化(如果光线变化不大,二值图像也差不多)。

  能够适应各种动态变化的图像具有良好的鲁棒性。

  0x03缺点对于快速运动的物体,画面容易变得“模糊”。如果太快,有时会被认为是两个物体。

  对于低速运动的物体,由于速度太慢,前后帧几乎重合,无法检测到物体。

  检测到的物体有一个‘洞’,只能检测到运动物体的外部,检测到的外部大于物体的实际轮廓。

  0x10相邻帧差法

  相邻帧差分法是一种两帧法,对相邻两帧图像进行差分运算,得到差值的绝对值,形成运动物体。

  它具有实时性高、运算速度快的优点。但是光线突然变化就没有效果了。

  0x11代码实现

  使用opencv-python演示导入cv2

  前一帧

  lastFram=无

  #我的视频源使用网络摄像头

  cap=cv2 .视频采集(RTSP://admin:admin @ 192 . 168 . 31 . 8933608445/live)).

  while(cap.isopened))):

  逐帧读取相机图片。

  ret,fram=cap.read(

  转换为灰度

  fram=cv2.cvtcolor(Fram,cv2。COLOR_BGR2GRAY)))))))).

  #转换为二进制图形

  FRAM=cv2。门槛(FRAM,25,255,cv2。THRESH_BINARY ) [1]

  #初始帧

  如果lastFram为None:

  fram=fram

  继续

  对前一帧和当前帧执行差分操作。

  帧增量=cv2。ABS diff (last fram,fram)))))))))))))))).

  #使当前帧成为上一帧

  lastFram=fram.copy(

  #显示

  cv2.imshow(f ,fram)).

  ifcv2.waitkey(1)0xff==ord ) q):

  黑色

  cap.release(

  cv2.destroyAllWindows(

  0x20三帧法

  所谓三格,就是在放弃两格的基础上进行AND运算。

  假设有A、B、c三帧,AB进行差分运算,BC进行差分运算,然后进行两次差分运算和运算。

  适合移动速度超过2帧。

  0x21程序实现导入cv2

  #一个框架

  aFram=无

  #B框架

  bFram=无

  #我的视频源使用网络摄像头

  cap=cv2 .视频采集(RTSP://admin:admin @ 192 . 168 . 31 . 8933608445/live)).

  while(cap.isopened))):

  逐帧读取相机图片。

  ret,fram=cap.read(

  转换为灰度

  fram=cv2.cvtcolor(Fram,cv2。COLOR_BGR2GRAY))))))))))))).

  #转换为二进制图形

  FRAM=cv2。门槛(FRAM,25,255,cv2。THRESH_BINARY ) [1]

  #初始帧

  如果bFram为None:

  如果aFram为None:

  aFram=fram

  否则:

  bFram=fram

  全球之声

  abfram=cv2。ABSdiff(afram,bFram))).

  继续

  BCFRAM=cv2。ABSdiff(BFram,Fram))))))))).

  # and运算

  thresh=cv2.bitwise_and(adFram,bcFram)).

  abFram=bcFram.copy())).

  #显示

  CV2.imshow(f ,thresh))。

  ifcv2.waitkey(1)0xff==ord ) q):

  黑色

  cap.release(

  cv2.destroyAllWindows(

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: