How to track white color on black background

asked 2015-07-22 02:54:34 -0500

mmt gravatar image

I have a code that doesn't works to white and black color.

On the code I select the ROI, and after that this code is supposed to keep tracking the ball, but it doesn't happen

I have this video : http://tinypic.com/r/2q1rk1g/8

and this code :

import numpy as np
import cv2

cap = cv2.VideoCapture('video.avi')


ret,frame = cap.read()


r,h,c,w = 490,50,895,50  # It is where the ball is.  
track_window = (c,r,w,h)
frame = cv2.cvtColor(frame, cv2.COLOR_GRAY2BGR)

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.)))
roi_hist = cv2.calcHist([hsv_roi],[0],mask,[180],[0,180])
cv2.normalize(roi_hist,roi_hist,0,255,cv2.NORM_MINMAX)

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)

        ret, track_window = cv2.meanShift(dst, track_window, term_crit)

        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()

I have no clue about what should I do, I tried to convert from gray to bgr, but it didn't works.

edit retag flag offensive close merge delete

Comments

you need color input for camshift algorithm. it will just never work with grayscale or b/w

(and the conversion only makes 3 identical channels, so nothing gained from that, in the end, you can't get the color information back, once it was lost)

if you must work on b/w data, you will need a different tracking algorithm, maybe the mosse tracker works better there.

berak gravatar imageberak ( 2015-07-22 03:07:07 -0500 )edit

Thank you for this information! I was going crazy with that code! I will try this one and update you! Thanks!

mmt gravatar imagemmt ( 2015-07-22 03:35:58 -0500 )edit

Is there a mosse tracker for C++, or it is just for python?

thdrksdfthmn gravatar imagethdrksdfthmn ( 2015-07-22 07:09:04 -0500 )edit

just for python, afaaik.

berak gravatar imageberak ( 2015-07-22 07:14:52 -0500 )edit