前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用OpenCV和Python构建运动热图视频

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

作者头像
代码医生工作室
发布2020-01-16 15:44:11
1.2K0
发布2020-01-16 15:44:11
举报
文章被收录于专栏:相约机器人相约机器人

作者 | Roberto Sannazzaro

来源 | Medium

编辑 | 代码医生团队

介绍:

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

工作流程:

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

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

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

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

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

代码:

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

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

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

代码语言:javascript
复制
capture = cv2.VideoCapture('input.mp4')
background_subtractor = cv2.bgsegm.createBackgroundSubtractorMOG()
length = int(capture.get(cv2.CAP_PROP_FRAME_COUNT))

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

代码语言:javascript
复制
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使用与该帧的大小相对应的大小来初始化该数组。

代码语言:javascript
复制
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它可以编写视频:

代码语言:javascript
复制
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()

最终结果:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-01-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 相约机器人 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
图像处理
图像处理基于腾讯云深度学习等人工智能技术,提供综合性的图像优化处理服务,包括图像质量评估、图像清晰度增强、图像智能裁剪等。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档