Python OpenCV 3 使用背景減除進行目標檢測
背景減除(Background Subtraction)是許多基於計算機視覺的任務中的主要預處理步驟。如果我們有完整的靜止的背景幀,那麼我們可以透過幀差法來計算畫素差從而獲取到前景物件。但是在大多數情況下,我們可能沒有這樣的影像,所以我們需要從我們擁有的任何影像中提取背景。當運動物體有陰影時,由於陰影也在移動,情況會變的變得更加複雜。為此引入了背景減除演算法,透過這一方法我們能夠從影片中分離出運動的物體前景,從而達到目標檢測的目的。 OpenCV已經實現了幾種非常容易使用的演算法。
環境
Python 3.6
OpenCV 3.2 + contrib
在Python下可以透過直接匯入wheel包來安裝opencv+contrib,可以從下面這個網址下載對應的檔案:opencv_python‑3.2.0+contrib‑cp36‑cp36m‑win_amd64.whl
KNN
KNN演算法,即K-nearest neigbours - based Background/Foreground Segmentation Algorithm。2006年,由Zoran Zivkovic 和Ferdinand van der Heijden在論文"Efficient adaptive density estimation per image pixel for the task of background subtraction."中提出。
bs = cv2.createBackgroundSubtractorKNN(detectShadows=True) fg_mask = bs.apply(frame)
knn.jpg
MOG
MOG演算法,即高斯混合模型分離演算法,全稱Gaussian Mixture-based Background/Foreground Segmentation Algorithm。2001年,由P.KadewTraKuPong和R.Bowden在論文“An improved adaptive background mixture model for real-time tracking with shadow detection”中提出。它使用一種透過K高斯分佈的混合來對每個背景畫素進行建模的方法(K = 3〜5)。
bs = cv2.bgsegm.createBackgroundSubtractorMOG(history=history) bs.setHistory(history) fg_mask = bs.apply(frame)
mog.jpg
MOG2
MOG2演算法,也是高斯混合模型分離演算法,是MOG的改進演算法。它基於Z.Zivkovic釋出的兩篇論文,即2004年釋出的“Improved adaptive Gausian mixture model for background subtraction”和2006年釋出的“Efficient Adaptive Density Estimation per Image Pixel for the Task of Background Subtraction”中提出。該演算法的一個重要特徵是 它為每個畫素選擇適當數量的高斯分佈,它可以更好地適應不同場景的照明變化等。
bs = cv2.createBackgroundSubtractorMOG2(history=history, detectShadows=True) bs.setHistory(history) fg_mask = bs.apply(frame)
mog2.jpg
GMG
該演算法結合統計背景影像估計和每畫素貝葉斯分割。由 Andrew B. Godbehere, Akihiro Matsukawa, Ken Goldberg在2012年的文章“Visual Tracking of Human Visitors under Variable-Lighting Conditions for a Responsive Audio Art Installation”中提出。該演算法使用前幾個(預設為120)幀進行後臺建模。它採用機率前景分割演算法,使用貝葉斯推理識別可能的前景物件。
bs = cv2.bgsegm.createBackgroundSubtractorGMG(initializationFrames=history) fg_mask = bs.apply(frame)
gmg.jpg
使用KNN根據前景面積檢測運動物體
程式碼:
# coding:utf8import cv2def detect_video(video): camera = cv2.VideoCapture(video) history = 20 # 訓練幀數 bs = cv2.createBackgroundSubtractorKNN(detectShadows=True) # 背景減除器,設定陰影檢測 bs.setHistory(history) frames = 0 while True: res, frame = camera.read() if not res: break fg_mask = bs.apply(frame) # 獲取 foreground mask if frames效果:
detect.jpg
作者:洛荷
連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1600/viewspace-2803073/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用 YOLO 進行實時目標檢測YOLO
- 使用關鍵點進行小目標檢測
- 在Python中使用OpenCV進行人臉檢測PythonOpenCV
- 使用 Rust 和 OpenCV 進行物體檢測RustOpenCV
- 物體檢測實戰:使用 OpenCV 進行 YOLO 物件檢測OpenCVYOLO物件
- 基於OpenCV和YOLOv3深度學習的目標檢測OpenCVYOLO深度學習
- Python+OpenCV目標跟蹤實現基本的運動檢測PythonOpenCV
- 使用 Go 語言與 OpenCV 進行物體檢測GoOpenCV
- 目標檢測
- 使用SlimYOLOv3框架實現實時目標檢測YOLO框架
- 深入學習OpenCV檢測及分割影象的目標區域OpenCV
- 張高興的 Raspberry Pi AI 開發指南:(二)使用 Python 和 HailoRT 進行實時目標檢測AIPython
- 2018目標檢測
- 九、目標檢測
- 目標檢測網路之 YOLOv3YOLO
- 目標檢測 YOLO v3 訓練 人臉檢測模型YOLO模型
- 目標檢測之SSD
- 目標檢測之RetinaNetNaN
- 目標檢測面面觀
- 28-目標檢測
- 目標檢測綜述
- 混合高斯模型實現運動目標檢測(OpenCV內建實現)模型OpenCV
- 目標檢測:二維碼檢測方案
- 使用pdb進行Python除錯Python除錯
- 目標檢測實用中可以改進的方向
- 目標檢測 YOLO v3 驗證 COCO 模型YOLO模型
- 目標檢測---教你利用yolov5訓練自己的目標檢測模型YOLO模型
- 目標檢測之YOLO系列YOLO
- 【目標檢測】Bounding Box Regression
- 目標檢測發展方向
- SSD 目標檢測 Keras 版Keras
- 【目標檢測】R-CNNCNN
- 做目標檢測,這一篇就夠了!2019最全目標檢測指南
- 這才是目標檢測YOLOv3的真實面目YOLO
- 深度學習之目標檢測與目標識別深度學習
- python opencv如何實現目標區域裁剪功能PythonOpenCV
- Object Detection(目標檢測神文)Object
- 目標檢測(Object Detection)總覽Object