前言:
此刻咱们对“kcf跟踪算法代码”可能比较关注,姐妹们都需要剖析一些“kcf跟踪算法代码”的相关内容。那么小编在网上网罗了一些关于“kcf跟踪算法代码””的相关文章,希望同学们能喜欢,看官们一起来学习一下吧!图像跟踪算法,我们由浅入深[狗头],先了解传统视觉里的跟踪算法。
传统视觉的图像跟踪。首先需要手动选出我们要识别的物体。随后使用跟踪算法实现跟踪,较为容易的就是opencv 自带的图像跟踪算法。
实验前的小测试[太阳]
目前OpenCV4版本中自带了8种目标跟踪算法。
下面是我经过测试做的总结
BOOSTING:算法原理类似于Haar cascades (AdaBoost),是一种很老的算法。这个算法速度慢并且不是很准。MIL:比BOOSTING准一点。KCF:速度比BOOSTING和MIL更快,与BOOSTING和MIL一样不能很好地处理遮挡问题。CSRT:比KCF更准一些,但是速度比KCF稍慢。MedianFlow:对于快速移动的目标和外形变化迅速的目标效果不好。TLD:会产生较多的false-positives。MOSSE:算法速度非常快,但是准确率比不上KCF和CSRT。在一些追求算法速度的场合很适用。GOTURN:OpenCV中自带的唯一一个基于深度学习的算法。运行算法需要提前下载好模型文件。
综合算法速度和准确率考虑,个人觉得CSRT、KCF、MOSSE这三个目标跟踪算法较好。
一起开始动手做跟踪器吧!
Step1 打开摄像头选取跟踪的物体[太阳]
初始化视频捕获设备,我选择使用摄像头,jupyter 运行python程序
步骤如下:
打开摄像头进入逻辑循环读取摄像头图像按回车按键确定绘制帧框取跟踪的物体按回车按键确定
代码如下:
cap= cv2.VideoCapture(0)print("按回车键选取当前帧")while True: gCapStatus,gFrame = cap.read() if (gCapStatus == False): print("捕获帧失败") quit() cv2.imshow("pick frame",gFrame) key = cv2.waitKey(1) & 0xFF if(key == 13): break# 框选感兴趣区域cv2.destroyWindow("pick frame")gROI = cv2.selectROI("ROI frame",gFrame,False)if (not gROI): print("空框选,退出") quit()cv2.destroyAllWindows()
演示如下[机智]
Step2 跟踪所选物体[太阳]初始化追踪器KCF ,跟踪器类Tracker的代码需要的请留下邮箱,邮件发送源代码(仅供学习交流)循环读取图像跟踪输出图像
代码如下:
# 初始化追踪器#'BOOSTING', 'MIL', 'KCF', 'TLD', 'MEDIANFLOW', 'GOTURN'gTracker = Tracker(tracker_type="KCF")gTracker.initWorking(gFrame,gROI)# 循环帧读取,开始跟踪while True: gCapStatus, gFrame = cap.read() if(gCapStatus): # 展示跟踪图片 _item = gTracker.track(gFrame) gFrame=_item.getFrame() cv2.imshow("track result",gFrame) gFrame=cv2.resize(gFrame,(640,480)) if _item.getMessage(): # 打印跟踪数据 print(_item.getMessage()) else: # 丢失,重新用初始ROI初始 print("丢失,重新使用初始ROI开始") gTracker = Tracker(tracker_type="KCF") gTracker.initWorking(gFrame, gROI) key = cv2.waitKey(1) & 0xFF if (key == ord('q')) | (key == 27): break else: print("捕获帧失败") breakcv2.destroyAllWindows()
效果展示[机智]
学习更多视觉内容,关注我持续更新中。[作揖][来看我]
标签: #kcf跟踪算法代码 #opencv自带的kcf算法 #kcf跟踪算法流程图