作者|Roberto Sannazzaro
編譯|Flin
來源|towardsdatascience
OpenCV是一個強大的影像和視頻處理庫,在這篇文章中,我將創建一個運動熱圖,用于檢測運動、一些物體或人的流動方向,以及在投影公共區域時對建筑師的幫助,

簡介:
OpenCV,或(開源計算機視覺)是英特爾于1999年開發的一個庫,主要是計算機視覺和實時視頻操作,它是用C++撰寫的,但受不同的語言(包括Python)支持,
作業流程:
這個程式是基于一種被稱為高斯背景減法的技術,這項技術被廣泛應用于用穩定的攝像機檢測運動物體,
背景減法創建一個表示幀(影像的靜態部分)背景的蒙版,對于每一幀,它將減去前一幀,
讓我們對該演算法如何作業的兩個主要步驟進行一個簡要概述:
-
背景初始化:在第一步中,通過凍結第一幀來計算背景的模型,
-
更新:在第二步中,下一幀將從上一幀中減去,因此,如果兩幀之間發生變化(移動),則這些幀的差異將反映出該變化,可以通過應用過濾器來進行市場銷售,
以下是背景遮罩應用于從城市攝像機錄制的短視頻的示例:

代碼:
對于整個專案存盤庫,請在此處檢查,
- https://github.com/robertosannazzaro/motion-heatmap-opencv/blob/master/README.md
代碼首先讀取輸入的視頻檔案并初始化所需的一些變數:
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 = https://www.cnblogs.com/panchuangai/p/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/
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/149598.html
標籤:其他
上一篇:使用AI來檢測違反社交距離的行為
下一篇:Python相關資料結構的排序
