繁体   English   中英

使用OpenCV for python从单个帧中提取前景

[英]Extract foreground from individual frames using opencv for python

问题

我正在使用每5秒钟左右将快照发布到网络的相机。 相机正在监视一行人。 我希望我的剧本能够告诉我一行人有多长时间。

我尝试过的

  • 起初,我以为可以使用BackgroundSubtractorMOG做到这一点,但这只是产生黑色图像。 这是我的代码,将其修改为使用图像而不是视频捕获:

     import numpy as np import cv2 frame = cv2.imread('sample.jpg') fgbg = cv2.BackgroundSubtractorMOG() fgmask = fgbg.apply(frame) cv2.imshow('frame', fgmask) cv2.waitKey() 
  • 接下来,我查看了图像上的前景提取 ,但这是交互式的,不适合需要脚本告诉我一行人有多长时间的用例。

  • 我还尝试使用peopledetect.py ,但是由于该行的图像来自较高的位置,因此该脚本无法检测到任何人。

我是opencv的新手,因此非常感谢您的帮助。 我可以根据要求提供任何其他详细信息。

注意:

我并不是在寻找可以解决整体问题的人,因为我只是想找出一种将人们与背景隔离开的方法。 但是,如果您认为有更好的解决方案,我愿意以不同的方式解决问题。

编辑:这是根据要求的示例图像: 样品

我想到了! @QED帮助我到达那里。 基本上,您不能仅使用一张图像来执行此操作。 您需要至少2帧进行比较,以便算法可以分辨出不同之处(前景)和相同之处(背景)。 因此,我拍摄了2帧,然后遍历它们以“训练”算法。 这是我的代码:

import numpy as np
import cv2

i = 1
while(1):
  fgbg = cv2.BackgroundSubtractorMOG()
  while(i < 3):
    print 'img' + `i` + '.jpg'
    frame = cv2.imread('img' + `i` + '.jpg')

    fgmask = fgbg.apply(frame)

    cv2.imshow('frame', fgmask)
    i += 1

    k = cv2.waitKey(30) & 0xff
    if k == 27:
        break

  cv2.destroyAllWindows()

这是连续2张图片的结果!

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM