2016-08-17 7 views
0

Итак, я скачал этот исходный код http://www.pyimagesearch.com/2015/05/25/basic-motion-detection-and-tracking-with-python-and-opencv/ :Python3 Tracking с opencv2

# import the necessary packages 
    import argparse 
    import datetime 
    import imutils 
    import time 
    import cv2 
    # construct the argument parser and parse the arguments 
    ap = argparse.ArgumentParser() 
    ap.add_argument("-v", "--video", help="path to the video file") 
    ap.add_argument("-a", "--min-area", type=int, default=500,   
    help="minimum area size") 
    args = vars(ap.parse_args()) 
    # if the video argument is None, then we are reading from webcam 
    if args.get("video", None) is None: 
     camera = cv2.VideoCapture(0) 
    time.sleep(0.25) 

    # otherwise, we are reading from a video file 
    else: 
     camera = cv2.VideoCapture(args["video"]) 

    # initialize the first frame in the video stream 
    firstFrame = None 

    # loop over the frames of the video 
    while True: 
    # grab the current frame and initialize the occupied/unoccupied 
     # text 
     (grabbed, frame) = camera.read() 
     text = "Unoccupied" 

    # if the frame could not be grabbed, then we have reached the end 
    # of the video 
    if not grabbed: 
     break 

    # resize the frame, convert it to grayscale, and blur it 
    frame = imutils.resize(frame, width=500) 
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) 
    gray = cv2.GaussianBlur(gray, (21, 21), 0) 

    # if the first frame is None, initialize it 
    if firstFrame is None: 
     firstFrame = gray 
     continue 

    # compute the absolute difference between the current frame and 
    # first frame 
    frameDelta = cv2.absdiff(firstFrame, gray) 
    thresh = cv2.threshold(frameDelta, 25, 255, cv2.THRESH_BINARY)[1] 

    # dilate the thresholded image to fill in holes, then find contours 
    # on thresholded image 
    thresh = cv2.dilate(thresh, None, iterations=2) 
    (cnts, _) = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL, 
     cv2.CHAIN_APPROX_SIMPLE) 

    # loop over the contours 
    for c in cnts: 
     # if the contour is too small, ignore it 
     if cv2.contourArea(c) < args["min_area"]: 
      continue 

     # compute the bounding box for the contour, draw it on the frame, 
     # and update the text 
     (x, y, w, h) = cv2.boundingRect(c) 
     cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2) 
     text = "Occupied" 

Но когда я запускаю его, он дает мне эту ошибку:

Traceback (most recent call last): 
    File "/Users/luistripa/Downloads/basic-motion-detection/motion_detector.py", line 57, in <module> 
cv2.CHAIN_APPROX_SIMPLE) 
ValueError: too many values to unpack (expected 2) 

кто может помочь я это исправить?

ответ

0

попытка добавления [-2:] за

(УНТ _) = cv2.findContours (thresh.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) [- 2:]