日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

使用Python,OpenCV从静态背景中提取移动前景

發布時間:2023/11/27 生活经验 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用Python,OpenCV从静态背景中提取移动前景 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

使用Python,OpenCV從靜態背景中提取移動前景

    • 1. 效果圖
    • 2. 原理
    • 3. 源碼
    • 參考

這篇博客將介紹OpenCV中的背景減法方法——即從靜態背景中提取移動前景。在許多基于視覺的應用中,背景減法是一個主要的預處理步驟。

例如考慮像訪客柜臺這樣的情況,其中靜態攝像頭記錄進出房間的訪客數量,或者交通攝像頭提取有關車輛的信息等。在所有這些情況下,首先需要單獨提取人或車輛。從技術上講需要從靜態背景中提取移動前景。

OpenCV3.0開始提供了1、2、3個方法,OpenCV4.0后減少了1、3方法,增加了4,只支持2、4倆個方法:cv2.createBackgroundSubtractorMOG2()、cv2.createBackgroundSubtractorKNN();

  1. BackgroundSubtractorMOG
  2. BackgroundSubtractorMOG2
  3. BackgroundSubtractorGMG
  4. BackgroundSubtractorKNN

1. 效果圖

以OpenCV 4.1. 2.30為例

效果圖分4塊,分別為 法2 不檢測陰影 VS 檢測陰影 VS 法4 不檢測陰影 VS 檢測陰影:

可以看出 不檢測陰影與檢測陰影,基本無差別;
KNN檢測到的背景要比MOG檢測到的陰影更清晰一些

噪音少一些,效果圖2如下:

2. 原理

OpenCV3.0開始提供了1、2、3個方法,OpenCV4.0后減少了1、3方法,增加了4,只支持2、4;

1. BackgroundSubtractorMOG

它是一種基于高斯混合的背景/前景分割算法。它使用一種方法通過混合 K 高斯分布對每個背景像素進行建模( K = 3 到 5)。混合物的權重表示這些顏色留在場景中的時間比例。可能的背景顏色是那些保持更長時間和更靜態的顏色。

首先使用函數 cv2.createBackgroundSubtractorMOG() 創建一個背景對象。它有一些可選參數,如歷史長度、高斯混合數、閾值等。它們都設置為一些默認值。然后在視頻循環中,使用 backgroundsubtractor.apply() 方法獲取前景蒙版。

2. BackgroundSubtractorMOG2

它也是一種基于高斯混合的背景/前景分割算法。該算法的一個重要特點是它為每個像素選擇適當數量的高斯分布。由于光照變化等,它可以更好地適應不同的場景。

首先使用函數 cv2.createBackgroundSubtractorMOG2() 創建一個背景減法器對象,可以選擇是否檢測陰影(默認為false,設置detectShadows = True),它會檢測并標記陰影,但會降低速度。陰影將以灰色標記。

3. BackgroundSubtractorGMG

該算法結合了統計背景圖像估計和逐像素貝葉斯分割。它使用前幾個(默認120)幀進行背景建模。它采用概率前景分割算法,使用貝葉斯推理識別可能的前景對象。估計是自適應的;較新的觀察比舊的觀察具有更大的權重以適應可變照明。完成了幾個形態過濾操作,如關閉和打開,以去除不需要的噪聲。在前幾幀中,您將看到一個黑色窗口。最好對結果應用形態學開運算以去除噪聲。

4. BackgroundSubtractorKNN

3. 源碼

# 背景減法
import numpy as np
import cv2cap = cv2.VideoCapture('images/slow_traffic_small.mp4')# 1. BackgroundSubtractorMOG2, 3. BackgroundSubtractorGMG OpenCV4不支持;
# 2. BackgroundSubtractorMOG2
# 4. BackgroundSubtractorKNN
fgbg = cv2.createBackgroundSubtractorMOG2()
fgbg_shadow = cv2.createBackgroundSubtractorMOG2(detectShadows=True)
fgbgKnn = cv2.createBackgroundSubtractorKNN()
fgbgKnn_shadow = cv2.createBackgroundSubtractorKNN(detectShadows=True)while (1):ret, frame = cap.read()if not ret:breakfgmask = fgbg.apply(frame)fgmask_shadow = fgbg_shadow.apply(frame)fgmaskKnn = fgbgKnn.apply(frame)fgmaskKnn_shadow = fgbgKnn_shadow.apply(frame)cv2.imshow('frame VS frame_shadow \n frameKnn VS frameKnn_shadow',np.vstack([np.hstack([fgmask, fgmask_shadow]), np.hstack([fgmaskKnn, fgmaskKnn_shadow])]))cv2.waitKey(0)k = cv2.waitKey(30) & 0xffif k == 27:breakcap.release()
cv2.destroyAllWindows()

參考

  • https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_video/py_bg_subtraction/py_bg_subtraction.html#py-background-subtraction

總結

以上是生活随笔為你收集整理的使用Python,OpenCV从静态背景中提取移动前景的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。