1

I am running the meanshift tracking algorithm to track objects in a live stream(with webcam) in OpenCV however the algorithm only works the first time it is run and does not work when I run the program again unless I restart my computer. Why is this so? Algorithm taken from: https://docs.opencv.org/trunk/db/df8/tutorial_py_meanshift.html

import numpy as np
import cv2
cap = cv2.VideoCapture(0)
# take first frame of the video
ret,frame = cap.read()
# setup initial location of window
r,h,c,w = 250,90,400,125  # simply hardcoded the values
track_window = (c,r,w,h)
# set up the ROI for tracking
roi = frame[r:r+h, c:c+w]
hsv_roi =  cv2.cvtColor(roi, cv2.COLOR_BGR2HSV)
mask = cv2.inRange(hsv_roi, np.array((0., 60.,32.)), np.array((180.,255.,255.)))
roi_hist = cv2.calcHist([hsv_roi],[0],mask,[180],[0,180])
cv2.normalize(roi_hist,roi_hist,0,255,cv2.NORM_MINMAX)
# Setup the termination criteria, either 10 iteration or move by atleast 1 pt
term_crit = ( cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT, 10, 1 )
while(1):
    ret ,frame = cap.read()
    if ret == True:
        hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
        dst = cv2.calcBackProject([hsv],[0],roi_hist,[0,180],1)
        # apply meanshift to get the new location
        ret, track_window = cv2.meanShift(dst, track_window, term_crit)
        # Draw it on image
        x,y,w,h = track_window
        img2 = cv2.rectangle(frame, (x,y), (x+w,y+h), 255,2)
        cv2.imshow('img2',img2)
        k = cv2.waitKey(60) & 0xff
        if k == 27:
            break
        else:
            cv2.imwrite(chr(k)+".jpg",img2)
    else:
        break
cv2.destroyAllWindows()
cap.release()
Vaderstalk
  • 71
  • 5
  • What do you mean it doesn't work? What exactly happens the second time? Do you get any errors? Perhaps the capture `release()` method isn't working correctly; if you `print(cap.isOpened())` after `cap.release()` what do you get? – alkasm Dec 04 '17 at 23:49
  • What I meant by not working is that, after I run the program the second time, the algorithm does not work (as in the rectangular box supposed to do the tracking does not move at all but just remains stationary) The cap.isOpened() prints false when I end the program – Vaderstalk Dec 05 '17 at 08:57
  • However your webcam video feed does work correctly, is that right? – alkasm Dec 05 '17 at 09:07
  • Yes the webcam feed works correctly. – Vaderstalk Dec 05 '17 at 09:12
  • Same here. The rectangle doesn't move at all. – Chupo_cro Mar 29 '18 at 04:04

0 Answers0