我有一个傍晚时间(下午6点至晚上9点)的视频文件。我想检测出行人的移动情况。
在尝试从“ 10分钟”时间帧视频中找出少量图像之间的差异(在任何10分钟视频帧剪辑中有10张等时间隔的图像)时,我正面临以下挑战:
所有图像都以不同的方式出现(作为“警报”出现),因为一直有一些植物因风而移动。
所有10张图片都变得不同,这也是因为太阳下山了,因此由于“自然光变化”,这10张图片 即使经过10分钟的帧后图像仍然不同 没有公共/人类运动。
如何限制我的算法仅关注视频某些区域的运动,而不是全部? (找不到 google上的任何内容,或者不知道在opencv中是否有任何算法)
答案 0 :(得分:1)
这个很难处理。我建议您尝试稍微模糊帧以减少移动植物时产生的噪音。另外,如果移动范围不太大,请尝试更改差异阈值和面积阈值(如果您的算法包含轮廓检测,请执行以下步骤)。希望这可以有所帮助。
对于检测人的“运动”,(10帧/ 10分钟)fps有点太低。框架中的人可以完全不同。这意味着您无法检测到单个人的移动,而只能找到两个帧之间的差异。如果您使用的是低fps的视频,建议您尝试Background Subtraction,以找到帧中的人物,而不是帧之间的人物移动。对于背景减法,要解决
所有这10张图像也有所不同,这也是因为太阳下山了,因此,即使没有公共/人类活动,由于10分钟的帧距而产生的10张图像也因自然变化而变化。
您可以尝试将所有帧的平均图像用作background_img
中的
difference = current_img - background_img
如果时间跨度较长,则可以将current_img
最近的图像的平均值用作background_img
。并在运行视频时不断更新background_img
。
如果您的投资回报率是框架中的矩形,请使用
my_ROI = cv :: Rect(x,y,width,height) cv :: Mat ROI_img = frame(my_ROI)
如果没有,请尝试使用mask
。
答案 1 :(得分:0)
我认为您正在寻找的是行人检测。您可以使用 OpenCV 包在 Python 中轻松完成此操作。
# Initialize a HOG descriptor
hog = cv2.HOGDescriptor()
# Set it for Pedestrian Detection
hog.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector())
# Then use the detector
hog.detectMultiScale()