# meanshift working only with .avi not with webcam why????

Hello to everybody and thanks in advance for helping me.... I have been struggling with the basic example of meanshift included below. It works great with .avi files but not with the webcam. when the webcam is selected as input video source (cap = cv2.VideoCapture(0) ) , the blue rectangle do not move. If I use the same webcam to record a video and I save it as .avi and open it ( cap = cv2.VideoCapture('testvi.avi') ), the program works perfectly. I used successfully the Camshift example, but I am only interested in working with meanshift. I am interested on fixed size tracking windows, thus meanshift is much more interesting than Camshift for me.

Any help is very much apreciated !! Thank you

import numpy as np
import cv2

#cap = cv2.VideoCapture('slow.avi')
#cap = cv2.VideoCapture('testvi.avi')
cap = cv2.VideoCapture(0)
# take first frame of the video

# setup initial location of window
# r,h,c,w - region of image
#           simply hardcoded the values
r,h,c,w = 200,50,300,50
track_window = (c,r,w,h)

# set up the ROI for tracking
roi = frame[r:r+h, c:c+w]
hsv_roi =  cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
mask = cv2.inRange(hsv_roi, np.array((0., 60.,32.)), np.array((180.,255.,255.)))
cv2.normalize(roi_hist,roi_hist,0,255,cv2.NORM_MINMAX)

# Setup the termination criteria, either 10 iteration or move by at least 1 pt
term_crit = ( cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT, 10, 1 )

while(1):
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)
a=type(track_window)
print track_window
# Draw it on image

x,y,w,h =track_window
cv2.rectangle(frame, (x,y), (x+w,y+h), 255,2)
cv2.imshow('img2',frame)

k = cv2.waitKey(60) & 0xff
if k == 27:
break

cv2.destroyAllWindows()
cap.release()

edit retag close merge delete

Sort by » oldest newest most voted

I tried your code and it worked for me - the box moved with a camera feed. Perhaps your lighting is poor so that the detection failed.

more

Official site

GitHub

Wiki

Documentation