


Comment Python OpenCV utilise-t-il la méthode de séparation en arrière-plan ?
May 16, 2023 pm 09:09 PMThéorie
La séparation d'arrière-plan (BS) est une technique courante pour générer un masque de premier plan (une image binaire contenant des pixels appartenant à des objets en mouvement dans la scène) à l'aide d'une caméra statique
Comme son nom l'indique, BS calcule le masque de premier plan , effectue une soustraction entre l'image actuelle et le modèle d'arrière-plan, qui contient la partie statique de la scène et tout ce qui peut être considéré comme arrière-plan, en tenant compte des caractéristiques de la scène observée.
La modélisation de l'arrière-plan comprend deux étapes principales :
1. Initialisation de l'arrière-plan
2. le modèle est mis à jour. Pour s'adapter aux changements possibles dans la scène
la mise en œuvre
donne à l'utilisateur la possibilité de traiter des fichiers vidéo ou des séquences d'images. Dans cet exemple, cv2.BackgroundSubtractorMOG2
sera utilisé pour générer le masque de premier plan. cv2.BackgroundSubtractorMOG2
生成前景掩码。
from __future__ import print_function import cv2 import argparse parser = argparse.ArgumentParser( description='This program shows how to use background subtraction methods provided by OpenCV. You can process both videos and images.') parser.add_argument('--input', type=str, help='Path to a video or a sequence of image.', default='vtest.avi') parser.add_argument('--algo', type=str, help='Background subtraction method (KNN, MOG2).', default='MOG2') args = parser.parse_args() ## [create] # create Background Subtractor objects if args.algo == 'MOG2': backSub = cv2.createBackgroundSubtractorMOG2() else: backSub = cv2.createBackgroundSubtractorKNN() ## [create] ## [capture] capture = cv2.VideoCapture(args.input) if not capture.isOpened(): print('Unable to open: ' + args.input) exit(0) ## [capture] while True: ret, frame = capture.read() if frame is None: break ## [apply] # update the background model fgMask = backSub.apply(frame) ## [apply] ## [display_frame_number] # get the frame number and write it on the current frame cv2.rectangle(frame, (10, 2), (100,20), (255,255,255), -1) cv2.putText(frame, str(capture.get(cv2.CAP_PROP_POS_FRAMES)), (15, 15), cv2.FONT_HERSHEY_SIMPLEX, 0.5 , (0,0,0)) ## [display_frame_number] ## [show] # show the current frame and the fg masks cv2.imshow('Frame', frame) cv2.imshow('FG Mask', fgMask) ## [show] keyboard = cv2.waitKey(30) if keyboard == 'q' or keyboard == 27: break
代码分析
分析上面代码的主要部分:
cv2.BackgroundSubtractor
对象将用于生成前景掩码。在此示例中,使用了默认参数,但是也可以在create
函数中声明特定的参数。
# create Background Subtractor objects KNN or MOG2 if args.algo == 'MOG2': backSub = cv2.createBackgroundSubtractorMOG2() else: backSub = cv2.createBackgroundSubtractorKNN()
cv2.VideoCapture
对象用于读取输入视频或输入图像序列
capture = cv2.VideoCapture(args.input) if not capture.isOpened: print('Unable to open: ' + args.input) exit(0)
每帧都用于计算前景掩码和更新背景。如果要更改用于更新背景模型的学习率,可以通过将参数传递给
apply
方法来设置特定的学习率
# update the background model fgMask = backSub.apply(frame)
当前帧编号可以从
cv2.Videocapture
# get the frame number and write it on the current frame cv2.rectangle(frame, (10, 2), (100,20), (255,255,255), -1) cv2.putText(frame, str(capture.get(cv2.CAP_PROP_POS_FRAMES)), (15, 15), cv2.FONT_HERSHEY_SIMPLEX, 0.5 , (0,0,0))
Copier après la connexionAnalyse du code
Analysez les principales parties du code ci-dessus :
- L'objet
cv2.BackgroundSubtractor
sera utilisé pour générer le masque de premier plan. Dans cet exemple, les paramètres par défaut sont utilisés, mais des paramètres spécifiques peuvent également être déclarés dans la fonctioncreate
.
# show the current frame and the fg masks cv2.imshow('Frame', frame) cv2.imshow('FG Mask', fgMask)
cv2.VideoCapture
est utilisé pour lire la vidéo d'entrée ou la séquence d'images d'entrée 🎜🎜🎜rrreee🎜🎜🎜Chaque image est utilisée pour calculer le masque de premier plan et mettre à jour l'arrière-plan . Si vous souhaitez modifier le taux d'apprentissage utilisé pour mettre à jour le modèle d'arrière-plan, vous pouvez définir un taux d'apprentissage spécifique en passant des paramètres à la méthode apply
🎜🎜🎜rrreee🎜🎜🎜Le numéro d'image actuel peut être obtenu de cv2. Extrait de l'objet Videocapture
et pointé dans le coin supérieur gauche de l'image actuelle. Utilisez un rectangle blanc pour mettre en surbrillance le numéro du cadre noir🎜🎜🎜rrreee🎜🎜🎜Afficher le cadre d'entrée actuel et le résultat🎜🎜🎜rrreeeCe qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Article chaud

Outils chauds Tags

Article chaud

Tags d'article chaud

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Quels sont les avantages et les inconvénients des modèles ?

Google AI annonce Gemini 1.5 Pro et Gemma 2 pour les développeurs

Pour seulement 250$, le directeur technique de Hugging Face vous apprend étape par étape comment peaufiner Llama 3

Partagez plusieurs frameworks de projets open source .NET liés à l'IA et au LLM

Un guide complet sur le débogage et l'analyse des fonctions Golang

Comment enregistrer la fonction d'évaluation
