OpenCV 3 计算机视觉 Python语言实现 8.2 背景分割器:KNN\MOG2和GMG

介绍BackgroundSubtractor类:

代码1:

#coding=gbk
import numpy as np
import cv2

cap = cv2.VideoCapture(r"G:\Python_work\detect\5.mp4")

mog = cv2.createBackgroundSubtractorMOG2()

while(1):
    ret, frame = cap.read()
    fgmask = mog.apply(frame)
    cv2.imshow('frame', fgmask)
    k = cv2.waitKey(30) & 0xff
    if k == 27:
        break

cap.release()
cv2.destroyAllWindows()

实现效果如下:

应用BackgroundSubtractorKNN实现运动检测的例子:

代码2:
#coding=gbk
import cv2
import numpy as np

bs = cv2.createBackgroundSubtractorKNN(detectShadows=True)
camera = cv2.VideoCapture(r"G:\Python_work\detect\video.mp4")

while True:
    ret, frame = camera.read()
    fgmask = bs.apply(frame)
    <if fgmask is None:
      break
    img3=fgmask.copy()> #个人追加的代码段,消除内部循环
    th = cv2.threshold(img3, 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), (255, 255, 0), 2)

    cv2.imshow("mog", fgmask)
    cv2.imshow("thresh", th)
    cv2.imshow("detection", frame)
    k = cv2.waitKey(30) & 0xff
    if k == 27:
        break

camera.release()
cv2.destroyAllWindows()

在运行课本附带的代码时,提示错误:cv2.error: OpenCV(3.4.1) D:\Build\OpenCV\opencv-3.4.1\modules\highgui\src\window.cpp:364: error: (-215) size.width>0 && size.height>0 in function cv::imshow,通过追加如<>中的代码段,可消除错误。

实现效果如下:

猜你喜欢

转载自blog.csdn.net/qq_20156437/article/details/81220344