问题描述
我正在一个项目中,我必须使用颜色作为对象的特征表示来检测和跟踪小型汽车(请参见下图)。 为了检测,我使用了直方图back_projection 参见:https://docs.opencv.org/master/dc/df6/tutorial_py_histogram_backprojection.html
检测代码如下所示:
def back_projectcam1(histm,hsv_histt,hsvt): #hist: model histogram,hsv_histt: target image
histogram,hsvt: hsv image of the target image
track_track=None
Mask = cv2.calcBackProject([hsvt],[0,1],histm,180,256],1)
Open=cv2.morphologyEx(Mask,cv2.MORPH_OPEN,kernel1)
Filter=cv2.filter2D(Open,-1,kernel3,Open)
Close=cv2.morphologyEx(Filter,cv2.MORPH_CLOSE,kernel1)
_,thresh = cv2.threshold(Close,10,255,cv2.THRESH_BINARY)
contours =cv2.findContours(Mask,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
if contours[2] is not None:
cntss = imutils.grab_contours(contours)
cnt=max(cntss,key=cv2.contourArea)
x,y,w,h = cv2.boundingRect(cnt)
track_track=x,h
return track_track,thresh
用于跟踪,我使用了kcf-tracker(Kernalized Correlation Filter)。
我的算法如下:
-仅在某些帧(每50帧)进行一次检测,并将结果边界框分配给kcf-tracker作为新的初始边界框。
其背后的想法是使过程比仅使用检测时更快。
当我运行代码时,关于速度和准确性,似乎一切正常:
除了汽车旋转时(表示在弯曲的铁路上行驶),跟踪器都会发生故障,如下所示:
我怀疑当跟踪的对象旋转时kcf.tracker失败,因为它只是一个相关性,而不是卷积过滤器(内核未旋转!)。但是,这只是一个假设,我可能是错的。
因此,要解决此问题,我只需使每两次检测之间的时间更短(例如,每20帧而不是50帧。但是,如果这样做,处理速度会降低!
所以我的问题是:
仅当汽车在弯道上行驶时,如何有效地告诉我的算法增加检测次数?
我试图静态地定义它(但是说当汽车到达弯道像素时,要进行更多的检测),但这并不有效。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)