python+opencv 運動檢測技術 基礎入門(Motion Detection Techniques with pyrhon and OpenCV)

python+opencv 運動檢測技術 基礎入門(Motion Detection Techniques with pyrhon and OpenCV)

python+opencv 運動檢測技術 基礎入門(Motion Detection Techniques with pyrhon and OpenCV)


資料來源: https://mp.weixin.qq.com/s/_eEn9hN5CDZjhlSfmPoqNg

https://github.com/safaabbes/Motion-Detection-Techniques-using-OpenCV


GITHUB: https://github.com/jash-git/Motion-Detection-Techniques-with-pyrhon-and-OpenCV


文字重點摘要

    01. 幀差分(畫面相減)
    02. 背景減法
    03. 自適應背景減法
    04. 高斯混合(MoG)


code

import cv2

frames=[]
MAX_FRAMES = 1000
N = 2
THRESH = 60
ASSIGN_VALUE = 255 #Value to assign the pixel if the threshold is met

cap = cv2.VideoCapture(0)  #Capture using Computer's Webcam
    
for t in range(MAX_FRAMES):
    #Capture frame by frame
    ret, frame = cap.read()
    #Convert frame to grayscale
    frame_gray = cv2.cvtColor(frame, cv2.COLOR_RGB2GRAY) 
    #Append to list of frames
    frames.append(frame_gray)
    if t >= N:
        #D(N) = || I(t) - I(t+N) || = || I(t-N) - I(t) ||
        diff = cv2.absdiff(frames[t-N], frames[t])
        #Mask Thresholding
        threshold_method = cv2.THRESH_BINARY
        ret, motion_mask = cv2.threshold(diff, THRESH, ASSIGN_VALUE, threshold_method)
        #Display the Motion Mask
        cv2.imshow('Motion Mask', motion_mask)
    #Exit
    if cv2.waitKey(1) == ord('e') or not ret:
        break

#When everything is finished, we release the capture
cap.release()
cv2.destroyAllWindows()

import cv2

background = None
MAX_FRAMES = 1000
THRESH = 60
ASSIGN_VALUE = 255

cap = cv2.VideoCapture(0)
    
for t in range(MAX_FRAMES):
    # Capture frame-by-frame
    ret, frame = cap.read()
    # Convert frame to grayscale
    frame_gray = cv2.cvtColor(frame, cv2.COLOR_RGB2GRAY)      
    if t == 0:
        # Train background with first frame
        background = frame_gray
    else:
        # Background subtraction
        diff = cv2.absdiff(background, frame_gray)
        # Mask thresholding
        ret, motion_mask = cv2.threshold(diff, THRESH, ASSIGN_VALUE, cv2.THRESH_BINARY)
        # Display the motion mask and background
        cv2.imshow('Motion mask', motion_mask)
        cv2.imshow('Background', background)
        # Exit 
        if cv2.waitKey(1) == ord('e') or not ret:
            break

# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()
import numpy as np
import cv2

background = None
MAX_FRAMES = 1000
THRESH = 60
ASSIGN_VALUE = 255
ALPHA = 0.1

def update_background(current_frame, prev_bg, alpha):
    bg = alpha * current_frame + (1 - alpha) * prev_bg
    bg = np.uint8(bg)  
    return bg

cap = cv2.VideoCapture(0)
    
for t in range(MAX_FRAMES):
    # Capture frame-by-frame
    ret, frame = cap.read()
    # Convert frame to grayscale
    frame_gray = cv2.cvtColor(frame, cv2.COLOR_RGB2GRAY)      
    if t == 0:
        # Train background with first frame
        background = frame_gray
    else:
        # Background subtraction
        diff = cv2.absdiff(background, frame_gray)
        # Mask thresholding
        ret, motion_mask = cv2.threshold(diff, THRESH, ASSIGN_VALUE, cv2.THRESH_BINARY)
        # Update background
        background = update_background(frame_gray, background, alpha = ALPHA)
        # Display the motion mask and background
        cv2.imshow('Motion mask', motion_mask)
        cv2.imshow('Background', background)
        # Exit 
        if cv2.waitKey(1) == ord('e') or not ret:
            break

# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()
import cv2

MAX_FRAMES = 1000
LEARNING_RATE = -1   
fgbg = cv2.createBackgroundSubtractorMOG2()

cap = cv2.VideoCapture(0)

for t in range(MAX_FRAMES):
    # Capture frame-by-frame
    ret, frame = cap.read()
    #Apply MOG 
    motion_mask = fgbg.apply(frame, LEARNING_RATE)
    #Get background
    background = fgbg.getBackgroundImage()
    # Display the motion mask and background
    cv2.imshow('background', background)
    cv2.imshow('Motion Mask', motion_mask)
    # Exit
    if cv2.waitKey(1) == ord('e') or not ret:
        break

# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()

圖文完整教學

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *