1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
|
import argparse import datetime import imutils import time import cv2
ap = argparse.ArgumentParser() ap.add_argument("-v", "--video", help="path to the video file") ap.add_argument("-a", "--min-area", type=int, default=1000, help="minimum area size") args = vars(ap.parse_args())
if args.get("video", None) is None: camera = cv2.VideoCapture(0) originaltime = time.time() else: camera = cv2.VideoCapture(args["video"])
firstFrame = None num=0
while True: if time.time()-originaltime <= 2: (grabbed, frame) = camera.read() else: (grabbed, frame) = camera.read() text = "not exist" if not grabbed: break frame = imutils.resize(frame, width = 500) gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) gray = cv2.GaussianBlur(gray, (21, 21), 0)
if firstFrame is None: firstFrame = gray continue
frameDelta = cv2.absdiff(firstFrame, gray)
thresh = cv2.threshold(frameDelta, 25, 255, cv2.THRESH_BINARY)[1]
thresh = cv2.dilate(thresh, None, iterations = 2) (cnts, _) = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE )
for c in cnts: if cv2.contourArea(c)<args["min_area"]: continue
(x, y, w, h) = cv2.boundingRect(c) cv2.rectangle(frame, (x, y), (x + w,y + h), (0, 255, 255), 2) text = "exist"
cv2.putText(frame, "room stats:{}".format(text), (10, 20), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 1) cv2.putText(frame, datetime.datetime.now().strftime("%A %d %B %Y %I:%M:%S%p"), (10, frame.shape[0] - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.4, (0, 0, 255), 1)
cv2.imshow("二值化图像", thresh) cv2.imshow("差值图像", frameDelta) cv2.imshow("监控", frame) cv2.waitKey(10)
flag = True for c in cnts: if cv2.contourArea(c)>args["min_area"]//4: flag = False if flag is True: firstFrame = cv2.addWeighted(firstFrame, 1-0.618, gray, 0.618, 0.0)
camera.release() cv2.destroyAllWindows()
|