Я работаю над отслеживанием объектов по алгоритму camshift. В настоящее время я использую встроенный код opencv, в котором у меня возникают проблемы с окклюзией.
hsv = cv2.cvtColor(self.frame, cv2.COLOR_BGR2HSV)
mask = cv2.inRange(hsv, np.array((0., 60., 32.)), np.array((180., 255., 255.)))
prob = cv2.calcBackProject([hsv], [0], self.hist, [0, 180], 1)
cv2.imshow('prob_0',prob)
prob &= mask
cv2.imshow('prob',prob)
term_crit = ( cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT, 10, 1 )
track_box, self.track_window = cv2.CamShift(prob, self.track_window, term_crit)
Моя проблема в том, что в этом коде, когда мой объект, который является красным шаром, выходит из поля зрения камеры или если я закрываю какую-то часть шара рукой, он вылетает и выдает ошибку, что:
track_box, self.track_window = cv2.CamShift(prob, self.track_window, term_crit)
error: ..\..\..\..\opencv\modules\video\src\camshift.cpp:80: error: (-5) Input
window has non-positive sizes in function cvMeanShift
Это связано с тем, что мой параметр cv2.Camshift ->, который является «вероятностью», не имеет значений, соответствующих моему шару (вероятность — это полученное двоичное изображение, состоящее из шара с порогом)
У меня есть одна идея, как справиться с окклюзией в этом сценарии. Это то, что я буду хранить матрицу мяча в глобальной переменной, и если текущий кадр моей камеры не может получить матрицу мяча, тогда он должен использовать вместо нее глобальную переменную, пока не найдет и не отследит мяч. Итак, как применить эту логику в данном коде?
Так может ли кто-нибудь помочь мне, как справиться с окклюзией в этой ситуации с мячом.