示例中的图像的腐蚀、膨胀和闭运算等需要根据具体视频进行实验得到最佳效果。代码仅供参考。
- import cv2 as cv
- import numpy as np
-
- #读取视频文件
- video = cv.VideoCapture("../../SampleVideos/Traffic.mp4")
- FPS = 10
- DELAY = int(1000 / FPS)
- kernel = cv.getStructuringElement(cv.MORPH_ELLIPSE, (5,5))
-
- #while True:
- # ret,frame = video.read()
- # if ret == False:
- # break;
- # cv.imshow("Traffic", frame)
- # if cv.waitKey(DELAY) == 27:
- # break;
- #video.release()
- #cv.destroyAllWindows()
-
-
- #移除背景
- #参考资料:https://blog.csdn.net/u014737138/article/details/80389977
- #mog = cv.bgsegm.createBackgroundSubtractorMOG()
- mog = cv.createBackgroundSubtractorMOG2()
- while True:
- ret,frame = video.read()
- if ret == False:
- break;
- #变为灰度图做高斯滤波
- gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
- #blur = cv.GaussianBlur(gray, (3,3), 5)
- foreground_mask = mog.apply(gray)
-
- #腐蚀
- #erode = cv.erode(foreground_mask, kernel)
- #膨胀
- #dilate = cv.dilate(foreground_mask, kernel, iterations=2)
- #闭运算
- close = cv.morphologyEx(foreground_mask, cv.MORPH_CLOSE, kernel)
- close = cv.GaussianBlur(close, (3,3), 5)
- cv.imshow("Traffic Original", frame)
- cv.imshow("Traffic Background Removed", foreground_mask)
- #cv.imshow("Traffic erode", erode)
- #cv.imshow("Traffic dilate", dilate)
- cv.imshow("Traffic close", close)
- if cv.waitKey(DELAY) == 27:
- break;
- video.release()
- cv.destroyAllWindows();