opencv学习笔记2--背景分割

1.knn = cv2.createBackgroundSubtractorKNN(detectShadows=True):knn背景分割

mog=cv2.createBackgroundSubtractorMOG2():MOG背景分割

 detectShadows = True表示执行分割,否则表示不执行分割

例子:

import cv2
 cap = cv2.VideoCapture('traffic.flv')
 knn = cv2.createBackgroundSubtractorKNN(detectShadows=True)
 while True :
     ret, frame = cap.read() # 读取视频
     fgmask = knn.apply(frame) # 背景分割
     cv2.imshow('frame', fgmask) # 显示分割结果
     if cv2.waitKey(100) & 0xff == ord('q'):
      break
 cap.release()
 cv2.destroyAllWindows()
2.例子:运动检测

import cv2 as cv
 cap = cv2.VideoCapture('traffic.flv')
 knn= cv2.createBackgroundSubtractorKNN(detectShadows=True)
 while True :
      ret, frame = cap.read()
      fgmask = knn.apply(frame) # 分割背景
      # 阈值化,将非纯白色(244~255)的所有像素设为0
      th = cv2.threshold(fgmask.copy(), 244, 255, cv2.THRESH_BINARY)[1]

      # 为了使效果更好,进行一次膨胀
      dilated = cv2.dilate(th, cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3,3)), iterations=2)

      # 检测轮廓
      image, contours, hier = cv2.findContours(dilated, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
      # 绘制轮廓
      for c in contours:
          if cv2.contourArea(c) > 1600:
              (x,y,w,h) = cv2.boundingRect(c)
              cv2.rectangle(frame, (x,y), (x+w, y+h), (0,255,0), 2)

      cv2.imshow('detection', frame)
      if cv2.waitKey(100) & 0xff == ord('q'):
          break

  cap.release()
  cv2.destroyAllWindows() 

猜你喜欢

转载自blog.csdn.net/jainszhang/article/details/79265588