乐趣区

关于人工智能:使用OpenCV和Python构建运动热图视频

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

OpenCV 是一个弱小的图像和视频解决库,在这篇文章中,我将创立一个静止热图,用于检测静止、一些物体或人的流动方向,以及在投影公共区域时对建筑师的帮忙。

简介:

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

工作流程:

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

背景减法创立一个示意帧(图像的动态局部)背景的蒙版,对于每一帧,它将减去前一帧。

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

  • 背景初始化:在第一步中,通过解冻第一帧来计算背景的模型。
  • 更新:在第二步中,下一帧将从上一帧中减去,因而,如果两帧之间发生变化(挪动),则这些帧的差别将反映出该变动,能够通过利用过滤器来进行市场销售。

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

代码:

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

  • https://github.com/robertosan…

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

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.co…

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

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

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

退出移动版