编程语言
首页 > 编程语言> > 使用OpenCV+Python构建运动热图视频

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

作者:互联网

OpenCV是一个强大的图像和视频处理库,在这篇文章中,我将创建一个运动热图,用于检测运动、以及物体或人的流动方向,在投影公共区域时可以对建筑师有所帮助。
使用OpenCV+Python构建运动热图视频
简介
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数组组成。
此外,在最后,当已经对每个帧执行了先前描述的操作时,颜色映射被应用于遮罩并且遮罩与当前帧合并。
![](http://www.icode9.com/i/li/?n=4&i=images/blog/202101/05/e50ec15a3b76fafe9523c1bd549139c2.png?,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
更进一步,可以制作一个显示热图逐帧衰减的视频。为了实现这一点,将导出每个帧,然后再次使用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()



**最后结果**
![](http://www.icode9.com/i/li/?n=4&i=images/blog/202101/05/e8b705fb251e6a3a407c24d613d859f0.png?,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)

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

标签:视频,Python,image,cv2,差法,OpenCV,热图,accum,frame
来源: https://blog.51cto.com/15075523/2583079