专栏首页相约机器人使用OpenCV和Python构建运动热图视频

使用OpenCV和Python构建运动热图视频

作者 | Roberto Sannazzaro

来源 | Medium

编辑 | 代码医生团队

介绍:

OpenCV(或称为“ 开源计算机视觉”)是英特尔于1999年开发的一个库,主要针对计算机视觉和实时视频操作,它使用C ++编写,但受不同语言(包括Python)的支持。

工作流程:

该程序基于一种称为高斯背景减法的技术。该技术广泛用于用稳定的相机检测运动物体。

背景减法会创建一个代表帧背景(图像的静态部分)的蒙版,并且对于每个帧,它都会减去前一个。

对该算法如何工作的两个主要步骤进行简要概述:

  • 背景初始化:在第一步中,通过冻结第一帧来计算背景模型。
  • 更新:在第二步中,将从前一帧减去下一帧,因此如果两个帧之间发生更改(移动),则这些帧的差异将反映出该更改,可以通过应用过滤器来进行市场销售。

以下是背景遮罩应用于从城市摄像机录制的短视频的示例:

代码:

对于整个项目存储库,请在此处检查。

https://github.com/robertosannazzaro/motion-heatmap-opencv/blob/master/README.md

该代码通过读取输入视频文件并初始化所需的一些变量开始:

capture = cv2.VideoCapture('input.mp4')
background_subtractor = cv2.bgsegm.createBackgroundSubtractorMOG()
length = int(capture.get(cv2.CAP_PROP_FRAME_COUNT))

然后,for循环遍历帧开始:

for i in range(0, length):
 
    ret, frame = capture.read()
 
    # If first frame
    if first_iteration_indicator == 1:
 
        first_frame = copy.deepcopy(frame)
        height, width = frame.shape[:2]
        accum_image = np.zeros((height, width), np.uint8)

第一个if块检查该帧是否为视频的第一帧,这样做是为了初始化背景减法的背景,然后accum_image使用与该帧的大小相对应的大小来初始化该数组。

filter = background_subtractor.apply(frame)  # remove the background
 
threshold = 2
maxValue = 2
ret, th1 = cv2.threshold(filter, threshold, maxValue, cv2.THRESH_BINARY)
 
accum_image = cv2.add(accum_image, th1)
 
color_image_video = cv2.applyColorMap(accum_image, cv2.COLORMAP_HOT)

要消除诸如风,小鸟儿飞舞或一些鼻涕等少量动作,请threshold与一起使用maxValue。

然后将掩码的结果添加到accum_image数组中,对每一帧执行此操作。结果由accum_image存储视频中发生的每个运动的数组组成。

最后当已经针对每个帧完成了先前描述的操作时,将颜色图应用于掩模,并且掩模与当前帧合并。

从上到下,从左到右:当前帧,当前最终帧,已过滤的当前帧,自应用帧0起具有所有蒙版的帧。

为了使视频逐帧显示热图的发展过程,可以保存每个帧,然后对于每个帧,使用cv2它可以编写视频:

video = cv2.VideoWriter('output.avi', fourcc, 30.0, (width, height))
for image in images:
    video.write(cv2.imread(os.path.join(image_folder, image)))
 
cv2.destroyAllWindows()

最终结果:

本文分享自微信公众号 - 相约机器人(xiangyuejiqiren),作者:代码医生

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-01-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 如何教电脑玩Spot it!使用OpenCV和深度学习

    爱好是玩棋盘游戏,因为对CNN有所了解,所以决定开发一种可以在纸牌游戏中击败人类的应用程序。想使用我自己的数据集从头开始构建模型,以查看使用小数据集从头开始的模...

    代码医生工作室
  • Street Lanes Finder - 检测自动驾驶汽车的车道

    在今天的文章中,将使用基本的计算机视觉技术来解决对于自动驾驶汽车至关重要的街道车道检测问题。到本文结束时,将能够使用Python和OpenCV执行实时通道检测。

    代码医生工作室
  • PyTorch中神经网络的对抗性攻击和防御

    深度学习和神经网络的兴起为现代社会带来了各种机会和应用,例如对象检测和文本转语音。然而,尽管看似准确性很高,但神经网络(以及几乎所有机器学习模型)实际上都可能受...

    代码医生工作室
  • OpenCV检测篇(一):猫脸检测

    OpenCV是时下最流行的基于C++的开源计算机视觉库,它功能丰富,函数众多,从最基本的读写图片,到简单的图像处理,再到更加高级的行人检测、人脸识别、文本识别等...

    刘潇龙
  • 常见的图像处理技术

    深度学习对于图像的分析、识别以及语义理解具有重要意义。“图像分类”、“对象检测”、“实例分割”等是深度学习在图像中的常见应用。为了能够建立更好的训练数据集,我们...

    小白学视觉
  • OpenCV-Python速查:从载入图片到人脸识别

    OpenCV是一个计算机视觉和机器学习的开源库。拥有2500+个优化算法——一套非常全面的既经典又最先进的计算机视觉和机器学习算法的集合,具备很多接口,包括Py...

    AI研习社
  • 1214 线段覆盖 非结构体做法

    1214 线段覆盖  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解 题目描述 Description     给定...

    attack
  • BVS智能视频分析-智慧交通解决方案

      随着现代城市化进程的快速发展,机动车辆保有量的急剧增加,道路交通及管理已经成为城市和交通管理部门的重要工作。本系统以先进的智能视频分析技术为手段,达到减少事...

    倍特威视
  • DeepMind视频行为分类竞赛,百度IDL获第一,新算法披露

    【新智元导读】ActivityNet竞赛是目前视频动作分析领域影响力最大的赛事。上月,2017年竞赛组织者通过官网宣布了本届比赛的成绩。其中,来自百度深度学习实...

    新智元
  • 视频AI智能分析高效快速解决视频取流、分发、级联等流媒体基础设施建设的难题

    很多做视频分析的厂家,在基础视频传输这一块的积累和沉淀还不是很多,而用传统的一些开源产品是无法达到稳健可靠视频调取与传输的,也就是视频的基础建设是需要时间积淀,...

    EasyNVR

扫码关注云+社区

领取腾讯云代金券