分割黑色和移动像素

Segment black AND moving Pixels

我正在尝试分割此视频的移动螺旋桨。我的方法是,检测所有黑色和移动像素以将螺旋桨与其余部分分开。 到目前为止,这是我尝试过的:

import numpy as np
import cv2


x,y,h,w = 350,100,420,500 # Croping values


cap = cv2.VideoCapture('Video Path')
  

while(1):        
    _, frame = cap.read() 
    
    frame = frame[y:y+h, x:x+w] # Crop Video
    
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) 
    lower_black = np.array([0,0,0]) 
    upper_black = np.array([360,255,90]) 
    mask = cv2.inRange(hsv, lower_black, upper_black) 
    res = cv2.bitwise_and(frame,frame, mask= mask) 
    
    nz = np.argwhere(mask)
                                
            
    cv2.imshow('Original',frame)
    cv2.imshow('Propeller Segmentation',mask)
  
    k = cv2.waitKey(30) & 0xff # press esc to exit
    if k == 27:
        break

cap.release()
cv2.destroyAllWindows()

Screenshot form the Video

Result of the Segmentation

With function cv.createBackgroundSubtractorMOG2()

我认为你应该看看 background subtraction. 它应该是解决你的问题的正确方法。

OpenCV 对此提供了很好的教程:Link