Bagaimanakah python OpenCV menggunakan kaedah pemisahan latar belakang?

王林
Lepaskan: 2023-05-16 21:09:15
ke hadapan
1287 orang telah melayarinya

Teori

  • Pemisahan Latar Belakang (BS) ialah teknik biasa untuk menghasilkan topeng latar depan (imej binari yang mengandungi piksel kepunyaan objek bergerak di tempat kejadian) dengan menggunakan kamera statik

  • Seperti namanya, BS mengira topeng latar depan, melakukan operasi penolakan antara bingkai semasa dan model latar belakang, yang mengandungi bahagian statik adegan, yang boleh dilihat sebagai sebagai latar belakang untuk segala-galanya.

  • Pemodelan latar belakang merangkumi dua langkah utama:

    • 1

    • 2. Kemas kini latar belakang Dalam langkah pertama, kira model awal latar belakang Dalam langkah kedua, kemas kini model untuk menyesuaikan diri dengan kemungkinan perubahan dalam pemandangan
    • Pelaksanaan
membolehkan pengguna memilih untuk memproses fail video atau jujukan imej. Dalam contoh ini,

akan digunakan untuk menjana topeng latar depan.

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
Salin selepas log masuk

Analisis Kodcv2.BackgroundSubtractorMOG2

Analisis bahagian utama kod di atas: Objek

    akan digunakan untuk menjana topeng latar depan. Dalam contoh ini, parameter lalai digunakan, tetapi parameter khusus juga boleh diisytiharkan dalam fungsi
  • .

    cv2.BackgroundSubtractorcreate

    # create Background Subtractor objects  KNN or MOG2
    if args.algo == 'MOG2':
        backSub = cv2.createBackgroundSubtractorMOG2()
    else:
        backSub = cv2.createBackgroundSubtractorKNN()
    Salin selepas log masuk

    objek digunakan untuk membaca input video atau urutan imej input
  • cv2.VideoCapture

    capture = cv2.VideoCapture(args.input)
    if not capture.isOpened:
        print('Unable to open: ' + args.input)
        exit(0)
    Salin selepas log masuk

    Setiap bingkai digunakan untuk mengira topeng latar depan dan mengemas kini latar belakang
  • . Jika anda ingin menukar kadar pembelajaran yang digunakan untuk mengemas kini model latar belakang, anda boleh menetapkan kadar pembelajaran tertentu dengan menghantar parameter kepada kaedah

    apply

    # update the background model
        fgMask = backSub.apply(frame)
    Salin selepas log masuk

nombor bingkai semasa Boleh diekstrak daripada objek
    dan dicop di penjuru kiri sebelah atas bingkai semasa. Gunakan segi empat tepat putih untuk menyerlahkan nombor bingkai hitam
  • 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))
    Salin selepas log masuk

Tunjukkan bingkai input semasa dan hasil
  • # show the current frame and the fg masks
        cv2.imshow('Frame', frame)
        cv2.imshow('FG Mask', fgMask)
    Salin selepas log masuk

    Atas ialah kandungan terperinci Bagaimanakah python OpenCV menggunakan kaedah pemisahan latar belakang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan