zoukankan      html  css  js  c++  java
  • 使用OpenCV和Python构建运动热图视频

    作者|Roberto Sannazzaro
    编译|Flin
    来源|towardsdatascience

    OpenCV是一个强大的图像和视频处理库,在这篇文章中,我将创建一个运动热图,用于检测运动、一些物体或人的流动方向,以及在投影公共区域时对建筑师的帮助。

    简介:

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

    工作流程:

    这个程序是基于一种被称为高斯背景减法的技术。这项技术被广泛应用于用稳定的摄像机检测运动物体。

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

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

    • 背景初始化:在第一步中,通过冻结第一帧来计算背景的模型。

    • 更新:在第二步中,下一帧将从上一帧中减去,因此,如果两帧之间发生变化(移动),则这些帧的差异将反映出该变化,可以通过应用过滤器来进行市场销售。

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

    代码:

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

    代码首先读取输入的视频文件并初始化所需的一些变量:

    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)
    

    为了消除例如风,小鸟飞行等少量运动,将阈值与maxValue一起应用到遮罩上。

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

    此外,在最后,因此,当已经对每个帧执行了先前描述的操作时,颜色映射被应用于遮罩并且遮罩与当前帧合并。

    更进一步说,可以制作一个显示热图逐帧衰减的视频。为了实现这一点,将导出每个帧,然后再次使用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()
    

    最后结果:

    原文链接:https://towardsdatascience.com/build-a-motion-heatmap-videousing-opencv-with-python-fd806e8a2340

    欢迎关注磐创AI博客站:
    http://panchuang.net/

    sklearn机器学习中文官方文档:
    http://sklearn123.com/

    欢迎关注磐创博客资源汇总站:
    http://docs.panchuang.net/

  • 相关阅读:
    借着面试留点东西
    buffer cache(zz)
    vmstat 命令
    部分mysql知识
    RandomAccessFile和FileInputOutPutStream
    lock condition
    tornado开发学习之2.输入输出,数据库操作,内置模板,综合示例
    tornado开发学习之1.HelloWorld和它加强版版本
    ASP.NET MVC框架
    Highcharts中UTC使用的注意点
  • 原文地址:https://www.cnblogs.com/panchuangai/p/13762583.html
Copyright © 2011-2022 走看看