【问题标题】:Live Heatmap generation in OpenCV pythonOpenCV python中的实时热图生成
【发布时间】:2017-10-01 17:19:37
【问题描述】:

我想在视频播放时生成热图,基本上我想显示人群密度。我不知道该怎么做,我现在正在这样做,它在处理整个视频后计算热图,我只想让它直播,就像视频正在播放并且颜色在不同的地方传播一样。

import numpy as np
import cv2


class Motion:
 def __init__(self):
    print("Motion Detection Object Created")
    # input file name of video
    self.inname = 'data.mp4'

    # file name to save
    self.outname = "C:/Heatmap"


 def prep(self):

    # just read the first frame to get height and width
    cap = cv2.VideoCapture(self.inname)

    ret, self.orig_image = cap.read()
    width = np.size(self.orig_image, 1)
    height = np.size(self.orig_image, 0)
    frame_size = (height, width)

    # make accumulator image of the same size
    self.accumulator = np.zeros((height, width), np.float32)  # 32 bit accumulator

 def run(self):
    cap = cv2.VideoCapture(self.inname)
    fgbg = cv2.createBackgroundSubtractorMOG2(varThreshold=1000, detectShadows=True)
    #print(fgbg[0])

    while (1):
        ret, frame = cap.read()
        #print(frame)

        if not ret:
            break
        fgmask = fgbg.apply(frame)
        self.accumulator = self.accumulator + fgmask

def write(self):

    self.ab = cv2.convertScaleAbs(255 - np.array(self.accumulator, 'uint8'))

    # only get reasonable high values, above mean
    ret, self.acc_thresh = cv2.threshold(self.ab, self.ab.mean(), 255, cv2.THRESH_TOZERO)

    # make a color map
    acc_col = cv2.applyColorMap(self.acc_thresh, cv2.COLORMAP_RAINBOW)

    cv2.imwrite(str(self.outname + "/heatmap.jpg"), acc_col)

    # add to original frame
    backg = cv2.addWeighted(np.array(acc_col, "uint8"), 0.45, self.orig_image, 0.55, 0)

    cv2.imwrite(str(self.outname + "/heatmap_background.jpg"), backg)


   # MAIN ENTRY POINT


  if __name__ == "__main__":
    motionVid = Motion()
    motionVid.prep()
    motionVid.run()
    motionVid.write()

【问题讨论】:

  • 看起来你现在的方式只在最后保存了一张图像,它是累加器的最新值。而且,你的累加器在整个视频中的总和......这能实现什么?

标签: python python-2.7 opencv numpy opencv3.0


【解决方案1】:

在您的 write 函数中,尝试添加:

VideoWriter video("output.avi",CV_FOURCC('M','J','P','G'),10,Size(frame_width,frame_height));

这里frame_width = 宽度和frame_height = 高度

您可以在 OpenCV 文档中获得用于视频压缩的编解码器列表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-27
    • 1970-01-01
    • 2011-10-23
    • 2013-05-01
    • 2014-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多